PHP
Manipulowanie tablicą
Szukaj…
Usuwanie elementów z tablicy
Aby usunąć element z tablicy, np. Element z indeksem 1.
$fruit = array("bananas", "apples", "peaches");
unset($fruit[1]);
Spowoduje to usunięcie jabłek z listy, ale zauważ, że unset
nie zmienia indeksów pozostałych elementów. Więc $fruit
zawiera teraz indeksy 0
i 2
.
W przypadku tablicy asocjacyjnej można usunąć w następujący sposób:
$fruit = array('banana', 'one'=>'apple', 'peaches');
print_r($fruit);
/*
Array
(
[0] => banana
[one] => apple
[1] => peaches
)
*/
unset($fruit['one']);
Teraz jest $ owoc
print_r($fruit);
/*
Array
(
[0] => banana
[1] => peaches
)
*/
Zauważ, że
unset($fruit);
wyłącza zmienną, a tym samym usuwa całą tablicę, co oznacza, że żaden z jej elementów nie jest już dostępny.
Usuwanie elementów końcowych
array_shift () - Odsuń element od początku tablicy.
Przykład:
$fruit = array("bananas", "apples", "peaches");
array_shift($fruit);
print_r($fruit);
Wynik:
Array
(
[0] => apples
[1] => peaches
)
array_pop () - Usuń element z końca tablicy.
Przykład:
$fruit = array("bananas", "apples", "peaches");
array_pop($fruit);
print_r($fruit);
Wynik:
Array
(
[0] => bananas
[1] => apples
)
Filtrowanie tablicy
Aby odfiltrować wartości z tablicy i uzyskać nową tablicę zawierającą wszystkie wartości spełniające warunek filtru, możesz użyć funkcji array_filter
.
Filtrowanie niepustych wartości
Najprostszym przypadkiem filtrowania jest usunięcie wszystkich „pustych” wartości:
$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];
Filtrowanie według oddzwaniania
Tym razem zdefiniujemy własną regułę filtrowania. Załóżmy, że chcemy uzyskać tylko liczby parzyste:
$my_array = [1,2,3,4,5,6,7,8];
$even_numbers = array_filter($my_array, function($number) {
return $number % 2 === 0;
});
Funkcja array_filter
otrzymuje tablicę do filtrowania jako pierwszy argument, a wywołanie zwrotne definiuje predykat filtru jako drugi argument.
Filtrowanie według indeksu
Trzeci parametr może być dostarczony do funkcji array_filter
, który pozwala dostosować, które wartości są przekazywane do wywołania zwrotnego. Ten parametr można ustawić na ARRAY_FILTER_USE_KEY
lub ARRAY_FILTER_USE_BOTH
, co spowoduje, że wywołanie zwrotne ARRAY_FILTER_USE_BOTH
klucz zamiast wartości dla każdego elementu w tablicy lub zarówno wartość, jak i klucz jako argumenty. Na przykład, jeśli chcesz zajmować się indeksami zamiast wartości:
$numbers = [16,3,5,8,1,4,6];
$even_indexed_numbers = array_filter($numbers, function($index) {
return $index % 2 === 0;
}, ARRAY_FILTER_USE_KEY);
Indeksy w filtrowanej tablicy
Zauważ, że array_filter
zachowuje oryginalne klucze tablicy. Częstym błędem byłoby użycie pętli for
w filtrowanej tablicy:
<?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
*/
Dzieje się tak, ponieważ wartości znajdujące się na pozycjach 1 (było 0
), 3 ( null
), 5 (pusty ciąg ''
) i 7 (pusta tablica []
) zostały usunięte wraz z odpowiadającymi im kluczami indeksu.
Jeśli chcesz przejrzeć wynik filtru w tablicy indeksowanej, powinieneś najpierw wywołać wartości array_values
na wyniku array_filter
, aby utworzyć nową tablicę z poprawnymi indeksami:
$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!
Dodanie elementu na początek tablicy
Czasami chcesz dodać element na początku tablicy bez modyfikowania żadnego z bieżących elementów ( kolejności ) w tablicy . Ilekroć jest to możliwe, możesz użyć array_unshift()
.
array_unshift()
przekazane elementy na początku tablicy. Zauważ, że lista elementów jest dodawana jako całość, tak że dodane elementy pozostają w tej samej kolejności. Wszystkie klawisze tablic numerycznych zostaną zmodyfikowane, aby rozpocząć liczenie od zera, podczas gdy klawisze dosłowne nie zostaną dotknięte.
Zaczerpnięte z dokumentacji PHP dla array_unshift()
.
Jeśli chcesz to osiągnąć, wszystko, co musisz zrobić, to:
$myArray = array(1, 2, 3);
array_unshift($myArray, 4);
Spowoduje to dodanie 4
jako pierwszego elementu w tablicy. Możesz to zweryfikować poprzez:
print_r($myArray);
Zwraca tablicę w następującej kolejności: 4, 1, 2, 3
.
Ponieważ array_unshift
zmusza tablicę do zresetowania par klucz-wartość, ponieważ nowy element pozwala, aby następujące wpisy miały klucze n+1
, mądrzej jest utworzyć nową tablicę i dołączyć istniejącą tablicę do nowo utworzonej tablicy.
Przykład:
$myArray = array('apples', 'bananas', 'pears');
$myElement = array('oranges');
$joinedArray = $myElement;
foreach ($myArray as $i) {
$joinedArray[] = $i;
}
Dane wyjściowe ($ joinArray):
Array ( [0] => oranges [1] => apples [2] => bananas [3] => pears )
Umieść na białej liście tylko niektóre klucze tablicy
Jeśli chcesz zezwalać tylko na niektóre klucze w swoich tablicach, szczególnie gdy tablica pochodzi z parametrów żądania, możesz użyć array_intersect_key
razem z 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]
Jeśli zmienna parameters
nie zawiera żadnego dozwolonego klucza, wówczas zmienna filteredParameters
będzie się składać z pustej tablicy.
Od wersji PHP 5.6 do tego zadania można również użyć array_filter
, przekazując flagę ARRAY_FILTER_USE_KEY
jako trzeci parametr:
$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 );
Użycie array_filter
daje dodatkową elastyczność wykonywania dowolnego testu na kluczu, np. $allowedKeys
może zawierać wzorce regularne zamiast zwykłych ciągów. Wyraźniej określa również intencję kodu niż array_intersect_key()
połączeniu z array_flip()
.
Sortowanie tablicy
Istnieje kilka funkcji sortowania tablic w php:
sortować()
Posortuj tablicę w porządku rosnącym według wartości.
$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
sort($fruits);
print_r($fruits);
prowadzi do
Array
(
[0] => Apfel
[1] => Banane
[2] => Orange
[3] => Zitrone
)
rsort ()
Sortuj tablicę w kolejności malejącej według wartości.
$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
rsort($fruits);
print_r($fruits);
prowadzi do
Array
(
[0] => Zitrone
[1] => Orange
[2] => Banane
[3] => Apfel
)
rodzaj()
Posortuj tablicę w porządku rosnącym według wartości i zachowaj indecies.
$fruits = [1 => 'lemon', 2 => 'orange', 3 => 'banana', 4 => 'apple'];
asort($fruits);
print_r($fruits);
prowadzi do
Array
(
[4] => apple
[3] => banana
[1] => lemon
[2] => orange
)
arsort ()
Posortuj tablicę w kolejności malejącej według wartości i zachowaj indecies.
$fruits = [1 => 'lemon', 2 => 'orange', 3 => 'banana', 4 => 'apple'];
arsort($fruits);
print_r($fruits);
prowadzi do
Array
(
[2] => orange
[1] => lemon
[3] => banana
[4] => apple
)
ksort ()
Sortuj tablicę w kolejności rosnącej według klucza
$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
ksort($fruits);
print_r($fruits);
prowadzi do
Array
(
[a] => orange
[b] => banana
[c] => apple
[d] => lemon
)
krsort ()
Sortuj tablicę w kolejności malejącej według klucza.
$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
krsort($fruits);
print_r($fruits);
prowadzi do
Array
(
[d] => lemon
[c] => apple
[b] => banana
[a] => orange
)
natsort ()
Sortuj tablicę w sposób, w jaki zrobiłby to człowiek (naturalny porządek).
$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natsort($files);
print_r($files);
prowadzi do
Array
(
[4] => File2.stack
[0] => File8.stack
[2] => file7.stack
[3] => file13.stack
[1] => file77.stack
)
natcasesort ()
Sortuj tablicę w sposób, w jaki zrobiłby to człowiek (naturalny porządek), ale z uwzględnieniem wielkości liter
$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natcasesort($files);
print_r($files);
prowadzi do
Array
(
[4] => File2.stack
[2] => file7.stack
[0] => File8.stack
[3] => file13.stack
[1] => file77.stack
)
człapać()
Tasuje tablicę (sortowaną losowo).
$array = ['aa', 'bb', 'cc'];
shuffle($array);
print_r($array);
Jak napisano w opisie, jest losowy, więc tutaj jest tylko jeden przykład tego, co może wyniknąć
Array
(
[0] => cc
[1] => bb
[2] => aa
)
usort ()
Posortuj tablicę za pomocą funkcji porównania zdefiniowanej przez użytkownika.
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);
prowadzi do
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
[4] => 6
)
uasort ()
Posortuj tablicę za pomocą funkcji porównania zdefiniowanej przez użytkownika i zachowaj klucze.
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);
prowadzi do
Array
(
[e] => -5
[b] => -3
[a] => 1
[d] => 3
[c] => 5
)
uksort ()
Sortuj tablicę według kluczy za pomocą funkcji porównania zdefiniowanej przez użytkownika.
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);
prowadzi do
Array
(
[ee] => 1
[g] => -3
[k] => 3
[oo] => -5
[4] => 5
)
Wymień wartości za pomocą kluczy
Funkcja array_flip
wymienia wszystkie klucze ze swoimi elementami.
$colors = array(
'one' => 'red',
'two' => 'blue',
'three' => 'yellow',
);
array_flip($colors); //will output
array(
'red' => 'one',
'blue' => 'two',
'yellow' => 'three'
)
Scal dwie tablice w jedną tablicę
$a1 = array("red","green");
$a2 = array("blue","yellow");
print_r(array_merge($a1,$a2));
/*
Array ( [0] => red [1] => green [2] => blue [3] => yellow )
*/
Tablica asocjacyjna:
$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 )
*/
- Scala elementy jednej lub więcej tablic razem, tak aby wartości jednej były dołączane na końcu poprzedniej. Zwraca wynikową tablicę.
- Jeśli tablice wejściowe mają takie same klucze łańcuchowe, to późniejsza wartość tego klucza zastąpi poprzednią. Jeśli jednak tablice zawierają klucze numeryczne, późniejsza wartość nie zastąpi pierwotnej wartości, ale zostanie dołączona.
- Wartości w tablicy wejściowej z klawiszami numerycznymi zostaną ponumerowane przy pomocy klawiszy inkrementujących zaczynających się od zera w tablicy wyników.