PHP
Выполнение по массиву
Поиск…
Применение функции к каждому элементу массива
Чтобы применить функцию к каждому элементу массива, используйте array_map()
. Это вернет новый массив.
$array = array(1,2,3,4,5);
//each array item is iterated over and gets stored in the function parameter.
$newArray = array_map(function($item) {
return $item + 1;
}, $array);
$newArray
теперь представляет собой array(2,3,4,5,6);
,
Вместо использования анонимной функции вы можете использовать именованную функцию. Вышеупомянутое можно написать так:
function addOne($item) {
return $item + 1;
}
$array = array(1, 2, 3, 4, 5);
$newArray = array_map('addOne', $array);
Если именованная функция является методом класса, вызов функции должен включать ссылку на объект класса, к которому принадлежит метод:
class Example {
public function addOne($item) {
return $item + 1;
}
public function doCalculation() {
$array = array(1, 2, 3, 4, 5);
$newArray = array_map(array($this, 'addOne'), $array);
}
}
Другой способ применения функции к каждому элементу массива - array_walk()
и array_walk_recursive()
. Обратный вызов, передаваемый в эти функции, принимает как ключ / индекс, так и значение каждого элемента массива. Эти функции не возвращают новый массив, а не логический для успеха. Например, чтобы напечатать каждый элемент в простом массиве:
$array = array(1, 2, 3, 4, 5);
array_walk($array, function($value, $key) {
echo $value . ' ';
});
// prints "1 2 3 4 5"
Параметр значения обратного вызова может передаваться по ссылке, позволяя вам изменять значение непосредственно в исходном массиве:
$array = array(1, 2, 3, 4, 5);
array_walk($array, function(&$value, $key) {
$value++;
});
$array
теперь представляет собой array(2,3,4,5,6);
Для вложенных массивов array_walk_recursive()
будет углубляться в каждый поддиапазон:
$array = array(1, array(2, 3, array(4, 5), 6);
array_walk_recursive($array, function($value, $key) {
echo $value . ' ';
});
// prints "1 2 3 4 5 6"
Примечание : array_walk
и array_walk_recursive
позволяют изменять значение элементов массива, но не ключей. Передача ключей по ссылке в обратный вызов действительна, но не действует.
Разделить массив на куски
array_chunk () разбивает массив на куски
Предположим, что мы следим за одномерным массивом,
$input_array = array('a', 'b', 'c', 'd', 'e');
Теперь, используя array_chunk () над массивом PHP,
$output_array = array_chunk($input_array, 2);
Выше кода создаст фрагменты из двух элементов массива и создаст многомерный массив следующим образом.
Array
(
[0] => Array
(
[0] => a
[1] => b
)
[1] => Array
(
[0] => c
[1] => d
)
[2] => Array
(
[0] => e
)
)
Если все элементы массива не равномерно разделены размером блока, последним элементом выходного массива будут оставшиеся элементы.
Если мы передадим второй аргумент меньше 1, тогда E_WARNING будет выбрано , а выходной массив будет NULL .
параметр | подробности |
---|---|
$ array (array) | Входной массив, массив для работы |
$ size (int) | Размер каждого фрагмента (целочисленное значение) |
$ preserve_keys (boolean) (необязательно) | Если вы хотите, чтобы выходной массив сохранил ключи, он установил значение TRUE в противном случае FALSE . |
Внедрение массива в строку
implode()
объединяет все значения массива, но теряет всю ключевую информацию:
$arr = ['a' => "AA", 'b' => "BB", 'c' => "CC"];
echo implode(" ", $arr); // AA BB CC
Имплицировать ключи можно с помощью array_keys()
:
$arr = ['a' => "AA", 'b' => "BB", 'c' => "CC"];
echo implode(" ", array_keys($arr)); // a b c
Имитация ключей со значениями более сложна, но может быть выполнена с использованием функционального стиля:
$arr = ['a' => "AA", 'b' => "BB", 'c' => "CC"];
echo implode(" ", array_map(function($key, $val) {
return "$key:$val"; // function that glues key to the value
}, array_keys($arr), $arr));
// Output: a:AA b:BB c:CC
array_reduce
array_reduce
уменьшает массив до одного значения. В принципе, array_reduce
будет проходить через каждый элемент с результатом последней итерации и создавать новое значение для следующей итерации.
Использование: array_reduce ($array, function($carry, $item){...}, $defaul_value_of_first_carry)
- $ carry - результат последнего раунда итерации.
- $ item - значение текущей позиции в массиве.
Сумма массива
$result = array_reduce([1, 2, 3, 4, 5], function($carry, $item){
return $carry + $item;
});
результат: 15
Наибольшее количество в массиве
$result = array_reduce([10, 23, 211, 34, 25], function($carry, $item){
return $item > $carry ? $item : $carry;
});
результата: 211
Все элементы более 100
$result = array_reduce([101, 230, 210, 341, 251], function($carry, $item){
return $carry && $item > 100;
}, true); //default value must set true
результат: true
Является ли какой-либо товар менее 100
$result = array_reduce([101, 230, 21, 341, 251], function($carry, $item){
return $carry || $item < 100;
}, false);//default value must set false
результат: true
Подобно implode ($ array, $ piece)
$result = array_reduce(["hello", "world", "PHP", "language"], function($carry, $item){
return !$carry ? $item : $carry . "-" . $item ;
});
результат: "hello-world-PHP-language"
если сделать метод implode, исходный код будет:
function implode_method($array, $piece){
return array_reduce($array, function($carry, $item) use ($piece) {
return !$carry ? $item : ($carry . $piece . $item);
});
}
$result = implode_method(["hello", "world", "PHP", "language"], "-");
результат: "hello-world-PHP-language"
Массивы «Destructuring» с использованием списка ()
Используйте list (), чтобы быстро назначить список значений переменных в массив. См. Также compact ()
// Assigns to $a, $b and $c the values of their respective array elements in $array with keys numbered from zero
list($a, $b, $c) = $array;
С PHP 7.1 (в настоящее время в бета-версии) вы сможете использовать синтаксис короткого списка :
// Assigns to $a, $b and $c the values of their respective array elements in $array with keys numbered from zero
[$a, $b, $c] = $array;
// Assigns to $a, $b and $c the values of the array elements in $array with the keys "a", "b" and "c", respectively
["a" => $a, "b" => $b, "c" => $c] = $array;
Нажмите значение на массиве
Существует два способа нажатия элемента в массив: array_push
и $array[] =
Массив_push используется следующим образом:
$array = [1,2,3];
$newArraySize = array_push($array, 5, 6); // The method returns the new size of the array
print_r($array); // Array is passed by reference, therefore the original array is modified to contain the new elements
Этот код будет печатать:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
[4] => 6
)
$array[] =
используется следующим образом:
$array = [1,2,3];
$array[] = 5;
$array[] = 6;
print_r($array);
Этот код будет печатать:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
[4] => 6
)