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.

5.6

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 ) 

Eaxmple / Demo

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 )
*/
  1. Scala elementy jednej lub więcej tablic razem, tak aby wartości jednej były dołączane na końcu poprzedniej. Zwraca wynikową tablicę.
  2. 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.
  3. 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.


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow