4.1 指定并非从元素 0 开始的数组
问题
希望一步为一个数组赋多个元素,不过不希望第一个元素的索引为0
实现
1 2 3 4 5 6 7 8
| <?php $presidents = [1 => 'Washington', 'Adams', 'Lincoln', 'Jefferson']; var_dump($presidents); $fruits[1] = 'apple'; $fruits[] = 'banana'; var_dump($fruits);
|
4.3 数组初始化为一个整数范围
问题
希望将一系列连续的整数赋至一个数组
实现
1 2
| <?php $cards = range(1,52);
|
4.4 迭代处理数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?php $array = range(0, 12); foreach ($array as $item) { echo $item . "\n"; } foreach ($array as $key => $value) { echo $value . "\n"; } for ($key = 0, $size = count($array); $key < $size; $key++) { echo $array[$key] . "\n"; } reset($array); while (list($key, $value) = each($array)) { echo $value . "\n"; } array_map(function($value) { return $value; }, $array);
|
4.5 从数组删除元素
问题
希望从一个数组删除一个或多个数组
实现
1 2 3 4 5 6 7 8 9
| <?php $array = range(0, 12); unset($array[0]); array_splice($array, 1, 9); var_dump($array);
|
4.6 改变数组大小
问题
希望改变一个数组的大小,使它大于或小于目前的大小
实现
1 2 3 4 5 6 7 8 9
| <?php $array = ['apple', 'banana', 'cocount']; $array = array_pad($array, 4, 'dates'); print_r($array); $array = array_pad($array, -10, 'zucchini'); print_r($array);
|
4.7 将数组追加到另一个数组
问题
希望把两个数组合并为一个数组
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php $array1 = ['hello', 'world']; $array2 = ['luis', 'edware', 'hello', 'world']; $array3 = array_merge($array1, $array2); print_r($array3); print_r($array1 + $array2); $array1 = ['A' => 'apple', 'B' => 'banana', 'O' => 'orange']; $array2 = ['A' => 'Luis', 'C' => 'Imooc']; print_r(array_merge($array1, $array2));
|
4.8 将数组转换为字符串
问题
希望将一个数组转换为一个格式化的字符串
实现
1 2 3 4 5 6
| <?php $array = range(0, 9); $string1 = join(',', $array); $string2 = implode(',', $array); print_r($string1 . "\n"); print_r($string2 . "\n");
|
4.10 检查一个键是否存在数组中
问题
想知道一个数组是否包含某个键
实现
1 2 3 4 5 6 7 8 9 10
| <?php $array = ['a' => 'apple', 'b' => 'banana', 'c' => 'cao ni ma']; if (array_key_exists('a', $array)) { echo $array['a'] . "\n"; } if (isset($array['a'])) { echo $array['c'] . "\n"; }
|
4.11 检查一个元素是否在数组中
问题
希望知道一个数组是否包含某个值
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php $array = ['a' => 'apple', 'b' => 'banana', 'c' => 'cao ni ma']; if (in_array('apple', $array)) { echo 'Own it'; } else { echo 'Need it'; } $array = ['Emma', 'Pride and Prejudice', 'Northhanger Abbey']; $array = array_flip($array); if (array_key_exists('Emma', $array)) { echo 'Own it'; } else { echo 'Need it'; }
|
4.12 查找一个值在数组中的位置
问题
希望知道一个值是否在数组中。如果这个值确实在数组中,希望知道它的键。
实现
1 2 3 4 5 6 7 8 9
| <?php $position = ['a'=>'apple','banana','orange','b'=>'not bad']; if(($result = array_search('123', $position)) !== false){ echo $result; }else{ echo 'false'; }
|
4.13 查找通过某个测试的元素
问题
希望找出数组中满足某些需求的元素
实现
1 2 3 4 5 6 7 8 9 10 11
| <?php $array = range(0, 20,2); $result = array_filter($array,function($value){ if($value%2 === 0){ return true; }else { return false; } }); ?>
|
4.14 查找数组中最大值或最小值元素
问题
希望找出数组中有最大值或最小值的元素。
实现
1 2 3 4 5
| <?php $array = range(1, 100); echo max($array) . "\n"; echo min($array) . "\n";
|
4.15 反转数组
问题
希望反转数组中元素的顺序
实现
1 2 3 4 5 6 7 8 9
| <?php $array = range(1, 100); $array = array_reverse($array); print_r($array); $fruits = ['a' => 'Apple', 'b' => 'Banana', 'o' => 'orange']; $fruits = array_reverse($fruits); print_r($fruits);
|
4.18 多个数据的排序
问题
希望对多个数组或多位数组排序
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?php $colors = ['Red', 'White', 'Blue']; $cities = ['Boston', 'New York', 'Chicago']; $stuff = [ 'colors' => $colors, 'cities' => $cities, ]; array_multisort($colors, $cities); print_r($colors); print_r($cities); array_multisort($stuff['colors'], $stuff['cities']); print_r($stuff); $numbers = [0, 1, 2, 3]; $letters = ['a', 'b', 'c', 'd']; array_multisort($numbers, SORT_NUMERIC, SORT_DESC, $letters, SORT_STRING, SORT_DESC); print_r($numbers); print_r($letters);
|
4.20 随机调整数组
问题
希望按一种随机的顺序重排数组中的元素
实现
1 2 3 4 5 6 7
| <?php $name = ['Ann', 'Eason', 'Luis', 'Edware']; print_r($name); shuffle($name); print_r($name);
|
4.21 删除数组中重复的元素
问题
希望删除数组中重复的元素
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php $array = ['Ann', 'Eason', 'Luis', 'Edware', 'Ann', 'Eason', 'Luis', 'Edware']; print_r($array); $unique = array_unique($array); print_r($unique); $unique2 = []; foreach ($array as $item) { if (!in_array($item, $unique2)) { $unique2[] = $item; } } print_r($unique2);
|
4.22 对数组中的各个元素应用一个函数
问题
希望对数组中的各个元素应用一个函数或方法,这就允许一次转换所有输入数据
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <?php $names = [ 'firstName' => 'Ann‘Eason', 'lastName' => 'Luis’Edware', ]; array_walk($names, function(&$value, $key) { $value = htmlentities($value, ENT_QUOTES); }); foreach ($names as $name) { echo $name . "\n"; } echo '****************************************' . "\n"; $names = [ 'firstName' => ['Ann"', 'Luis"'], 'lastName' => ['"Eason', '"Edware'], ]; array_walk_recursive($names, function(&$value, $key) { $value = htmlentities($value, ENT_QUOTES); }); foreach ($names as $name) { foreach ($name as $item) { echo $item . "\n"; } }
|
4.23 查找两个数组的并集、交集或差集
问题
有两个数组,希望找出它们的并集、交集、差集和对称差集
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?php $a = range('a', 'n'); $b = range('h', 't'); $union = array_unique(array_merge($a, $b)); print_r($union); $intersection = array_intersect($a, $b); print_r($intersection); $difference1 = array_diff($a, $b); $difference2 = array_diff($b, $a); print_r($difference1); print_r($difference2); $difference = array_merge(array_diff($a, $b), array_diff($b, $a)); print_r($difference);
|
4.24 高效迭代处理大型数据集
问题
希望迭代处理一个元素列表,不过整个列表会占用大量内存,或者生成整个列表的速度非常慢。
实现
4.25 使用数组语法访问对象
问题
有一个对象,不过希望它作为一个数组来读写数据。这样不仅可以得到面向对象设计的好处,还可以利用我们熟悉的数组接口
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <?php class FakeArray implements ArrayAccess { private $elements; public function __construct() { $this->elements = []; } public function offsetExists($offset) { return isset($this->elements[$offset]); } public function offsetGet($offset) { return $this->elements[$offset]; } public function offsetSet($offset, $value) { return $this->elements[$offset] = $value; } public function offsetUnset($offset) { unset($this->elements[$offset]); } } $array = new FakeArray; $array['animal'] = "wabbit"; if (isset($array['animal']) && $array['animal'] == 'wabbit') { unset($array['animal']); } if (!isset($array['animal'])) { print "Well,What did you expect in an"; }
|