PHP
Манипулирование массивом
Поиск…
Удаление элементов из массива
Чтобы удалить элемент внутри массива, например, элемент с индексом 1.
$fruit = array("bananas", "apples", "peaches");
unset($fruit[1]);
Это приведет к удалению яблок из списка, но обратите внимание, что unset
не меняет индексы остальных элементов. Таким образом, $fruit
теперь содержит индексы 0
и 2
.
Для ассоциативного массива вы можете удалить вот так:
$fruit = array('banana', 'one'=>'apple', 'peaches');
print_r($fruit);
/*
Array
(
[0] => banana
[one] => apple
[1] => peaches
)
*/
unset($fruit['one']);
Теперь $ fruit
print_r($fruit);
/*
Array
(
[0] => banana
[1] => peaches
)
*/
Обратите внимание, что
unset($fruit);
отключает переменную и, таким образом, удаляет весь массив, что означает, что ни один из его элементов больше не доступен.
Извлечение клеммных элементов
array_shift () - Сдвинуть элемент с начала массива.
Пример:
$fruit = array("bananas", "apples", "peaches");
array_shift($fruit);
print_r($fruit);
Выход:
Array
(
[0] => apples
[1] => peaches
)
array_pop () - вывести элемент из конца массива.
Пример:
$fruit = array("bananas", "apples", "peaches");
array_pop($fruit);
print_r($fruit);
Выход:
Array
(
[0] => bananas
[1] => apples
)
Фильтрация массива
Чтобы отфильтровать значения из массива и получить новый массив, содержащий все значения, удовлетворяющие условию фильтра, вы можете использовать функцию array_filter
.
Фильтрация непустых значений
Самый простой случай фильтрации - удалить все «пустые» значения:
$my_array = [1,0,2,null,3,'',4,[],5,6,7,8];
$non_empties = array_filter($my_array); // $non_empties will contain [1,2,3,4,5,6,7,8];
Фильтрация путем обратного вызова
На этот раз мы определяем наше собственное правило фильтрации. Предположим, мы хотим получить только четные числа:
$my_array = [1,2,3,4,5,6,7,8];
$even_numbers = array_filter($my_array, function($number) {
return $number % 2 === 0;
});
Функция array_filter
получает массив, который должен быть отфильтрован как его первый аргумент, и обратный вызов, определяющий предикат фильтра как второй.
Фильтрация по индексу
Третий параметр может быть предоставлен функции array_filter
, что позволяет настраивать, какие значения передаются на обратный вызов. Этот параметр может быть установлен как ARRAY_FILTER_USE_KEY
или ARRAY_FILTER_USE_BOTH
, что приведет к тому, что обратный вызов получит ключ вместо значения для каждого элемента в массиве, или оба значения и ключа в качестве аргументов. Например, если вы хотите иметь дело с индексами istead значений:
$numbers = [16,3,5,8,1,4,6];
$even_indexed_numbers = array_filter($numbers, function($index) {
return $index % 2 === 0;
}, ARRAY_FILTER_USE_KEY);
Индексы в фильтрованном массиве
Обратите внимание, что array_filter
сохраняет исходные ключи массива. Распространенная ошибка была бы попробовать использовать for
цикла по отфильтрованному массиву:
<?php
$my_array = [1,0,2,null,3,'',4,[],5,6,7,8];
$filtered = array_filter($my_array);
error_reporting(E_ALL); // show all errors and notices
// innocently looking "for" loop
for ($i = 0; $i < count($filtered); $i++) {
print $filtered[$i];
}
/*
Output:
1
Notice: Undefined offset: 1
2
Notice: Undefined offset: 3
3
Notice: Undefined offset: 5
4
Notice: Undefined offset: 7
*/
Это происходит потому, что значения, которые были на позициях 1 (было 0
), 3 ( null
), 5 (пустая строка ''
) и 7 (пустой массив []
), были удалены вместе с соответствующими индексными ключами.
Если вам нужно array_values
результат фильтра по индексированному массиву, вы должны сначала вызвать array_values
для результата array_filter
, чтобы создать новый массив с правильными индексами:
$my_array = [1,0,2,null,3,'',4,[],5,6,7,8];
$filtered = array_filter($my_array);
$iterable = array_values($filtered);
error_reporting(E_ALL); // show all errors and notices
for ($i = 0; $i < count($iterable); $i++) {
print $iterable[$i];
}
// No warnings!
Добавление элемента в начало массива
Иногда вы хотите добавить элемент в начало массива без изменения любого из текущих элементов ( порядка ) внутри массива . Всякий раз, когда это так, вы можете использовать array_unshift()
.
array_unshift()
добавляет переданные элементы в начало массива. Обратите внимание, что список элементов добавляется в целом, так что добавленные элементы остаются в одном порядке. Все цифровые ключи массива будут изменены, чтобы начать отсчет с нуля, пока не будут затронуты литеральные клавиши.
Взято из документации PHP для array_unshift()
.
Если вы хотите добиться этого, вам нужно всего лишь:
$myArray = array(1, 2, 3);
array_unshift($myArray, 4);
Теперь это добавит 4
в качестве первого элемента в вашем массиве. Вы можете проверить это:
print_r($myArray);
Это возвращает массив в следующем порядке: 4, 1, 2, 3
.
Поскольку array_unshift
заставляет массив сбросить пары ключ-значение в качестве нового элемента, пусть следующие записи имеют ключи n+1
умнее создать новый массив и добавить существующий массив к вновь созданному массиву.
Пример:
$myArray = array('apples', 'bananas', 'pears');
$myElement = array('oranges');
$joinedArray = $myElement;
foreach ($myArray as $i) {
$joinedArray[] = $i;
}
Выход ($ joinArray):
Array ( [0] => oranges [1] => apples [2] => bananas [3] => pears )
В белом списке только некоторые клавиши массива
Если вы хотите разрешить только определенные ключи в своих массивах, особенно когда массив поступает из параметров запроса, вы можете использовать array_intersect_key
вместе с array_flip
.
$parameters = ['foo' => 'bar', 'bar' => 'baz', 'boo' => 'bam']; $allowedKeys = ['foo', 'bar']; $filteredParameters = array_intersect_key($parameters, array_flip($allowedKeys)); // $filteredParameters contains ['foo' => 'bar', 'bar' => 'baz]
Если переменная parameters
не содержит разрешенного ключа, переменная filteredParameters
будет состоять из пустого массива.
С PHP 5.6 вы также можете использовать array_filter
для этой задачи, передав флаг ARRAY_FILTER_USE_KEY
в качестве третьего параметра:
$parameters = ['foo' => 1, 'hello' => 'world']; $allowedKeys = ['foo', 'bar']; $filteredParameters = array_filter( $parameters, function ($key) use ($allowedKeys) { return in_array($key, $allowedKeys); }, ARRAY_FILTER_USE_KEY );
Использование array_filter
дает дополнительную гибкость при выполнении произвольного теста против ключа, например $allowedKeys
может содержать шаблоны регулярных выражений вместо простых строк. Он также более четко указывает намерение кода, чем array_intersect_key()
сочетании с array_flip()
.
Сортировка массива
Существует несколько функций сортировки для массивов в php:
Сортировать()
Сортировка массива в порядке возрастания по значению.
$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
sort($fruits);
print_r($fruits);
приводит к
Array
(
[0] => Apfel
[1] => Banane
[2] => Orange
[3] => Zitrone
)
rsort ()
Сортировка массива в порядке убывания по значению.
$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
rsort($fruits);
print_r($fruits);
приводит к
Array
(
[0] => Zitrone
[1] => Orange
[2] => Banane
[3] => Apfel
)
asort ()
Сортируйте массив в порядке возрастания по значению и сохраните indecies.
$fruits = [1 => 'lemon', 2 => 'orange', 3 => 'banana', 4 => 'apple'];
asort($fruits);
print_r($fruits);
приводит к
Array
(
[4] => apple
[3] => banana
[1] => lemon
[2] => orange
)
arsort ()
Сортируйте массив в порядке убывания по значению и сохраните indecies.
$fruits = [1 => 'lemon', 2 => 'orange', 3 => 'banana', 4 => 'apple'];
arsort($fruits);
print_r($fruits);
приводит к
Array
(
[2] => orange
[1] => lemon
[3] => banana
[4] => apple
)
ksort ()
Сортировка массива в порядке возрастания по ключу
$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
ksort($fruits);
print_r($fruits);
приводит к
Array
(
[a] => orange
[b] => banana
[c] => apple
[d] => lemon
)
krsort ()
Сортировка массива в порядке убывания по ключу.
$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
krsort($fruits);
print_r($fruits);
приводит к
Array
(
[d] => lemon
[c] => apple
[b] => banana
[a] => orange
)
natsort ()
Сортируйте массив так, как это сделал бы человек (естественный порядок).
$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natsort($files);
print_r($files);
приводит к
Array
(
[4] => File2.stack
[0] => File8.stack
[2] => file7.stack
[3] => file13.stack
[1] => file77.stack
)
natcasesort ()
Сортируйте массив так, как это сделал бы человек (естественный порядок), но интенсивность дела
$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natcasesort($files);
print_r($files);
приводит к
Array
(
[4] => File2.stack
[2] => file7.stack
[0] => File8.stack
[3] => file13.stack
[1] => file77.stack
)
перетасовать ()
Перемешивает массив (сортируется случайным образом).
$array = ['aa', 'bb', 'cc'];
shuffle($array);
print_r($array);
Как написано в описании, оно случайное, поэтому здесь только один пример того, что он может привести
Array
(
[0] => cc
[1] => bb
[2] => aa
)
usort ()
Сортировка массива с пользовательской функцией сравнения.
function compare($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$array = [3, 2, 5, 6, 1];
usort($array, 'compare');
print_r($array);
приводит к
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
[4] => 6
)
uasort ()
Сортируйте массив с пользовательской функцией сравнения и сохраните ключи.
function compare($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$array = ['a' => 1, 'b' => -3, 'c' => 5, 'd' => 3, 'e' => -5];
uasort($array, 'compare');
print_r($array);
приводит к
Array
(
[e] => -5
[b] => -3
[a] => 1
[d] => 3
[c] => 5
)
uksort ()
Сортировка массива по ключам с пользовательской функцией сравнения.
function compare($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$array = ['ee' => 1, 'g' => -3, '4' => 5, 'k' => 3, 'oo' => -5];
uksort($array, 'compare');
print_r($array);
приводит к
Array
(
[ee] => 1
[g] => -3
[k] => 3
[oo] => -5
[4] => 5
)
Обмен значениями с ключами
Функция array_flip
будет обменивать все ключи со своими элементами.
$colors = array(
'one' => 'red',
'two' => 'blue',
'three' => 'yellow',
);
array_flip($colors); //will output
array(
'red' => 'one',
'blue' => 'two',
'yellow' => 'three'
)
Объединение двух массивов в один массив
$a1 = array("red","green");
$a2 = array("blue","yellow");
print_r(array_merge($a1,$a2));
/*
Array ( [0] => red [1] => green [2] => blue [3] => yellow )
*/
Ассоциативный массив:
$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","b"=>"yellow");
print_r(array_merge($a1,$a2));
/*
Array ( [a] => red [b] => yellow [c] => blue )
*/
- Объединяет элементы одного или нескольких массивов вместе так, чтобы значения одного добавлялись к концу предыдущего. Он возвращает результирующий массив.
- Если входные массивы имеют одинаковые строковые ключи, то более позднее значение для этого ключа перезапишет предыдущий. Если, однако, массивы содержат числовые клавиши, то более поздняя величина не будет перезаписывать исходное значение, но будет добавлена.
- Значения во входном массиве с числовыми клавишами будут перенумерованы с добавочными клавишами, начиная с нуля в массиве результатов.