Sök…


Ta bort element från en matris

För att ta bort ett element i en matris, t.ex. elementet med index 1.

$fruit = array("bananas", "apples", "peaches");
unset($fruit[1]);

Detta kommer att ta bort äpplen från listan, men märker att unset inte ändrar indexen för de återstående elementen. Så $fruit innehåller nu indexen 0 och 2 .

För associerande matris kan du ta bort så här:

$fruit = array('banana', 'one'=>'apple', 'peaches');

print_r($fruit);
/*
    Array
    (
        [0] => banana
        [one] => apple
        [1] => peaches
    )
*/

unset($fruit['one']); 

Nu är $ frukt

print_r($fruit);

/*
Array
(
    [0] => banana
    [1] => peaches
)
*/

Anteckna det

unset($fruit);

ställer in variabeln och tar bort hela matrisen, vilket betyder att inga av dess element är tillgängliga längre.

Ta bort terminalelement

array_shift () - Skift ett element från början av array.

Exempel:

  $fruit = array("bananas", "apples", "peaches");
  array_shift($fruit);
  print_r($fruit);

Produktion:

 Array
(
    [0] => apples
    [1] => peaches
)

array_pop () - Pop elementet i slutet av array.

Exempel:

  $fruit = array("bananas", "apples", "peaches");
  array_pop($fruit);
  print_r($fruit);

Produktion:

 Array
(
    [0] => bananas
    [1] => apples
)

Filtrera en matris

För att filtrera bort värden från en matris och få en ny matris som innehåller alla värden som uppfyller filtervillkoret kan du använda funktionen array_filter .

Filtrera icke-tomma värden

Det enklaste fallet med filtrering är att ta bort alla "tomma" värden:

$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]; 

Filtrering med återuppringning

Den här gången definierar vi vår egen filtreringsregel. Anta att vi bara vill få jämna siffror:

$my_array = [1,2,3,4,5,6,7,8];

$even_numbers = array_filter($my_array, function($number) {
    return $number % 2 === 0;   
});

array_filter funktionen mottar matrisen som ska filtreras som sitt första argument, och en återuppringning som definierar filterpredikatet som dess andra.

5,6

Filtrering efter index

En tredje parameter kan tillhandahållas till array_filter funktionen, som gör det möjligt att justera vilka värden som skickas till återuppringningen. Denna parameter kan ställas in på antingen ARRAY_FILTER_USE_KEY eller ARRAY_FILTER_USE_BOTH , vilket kommer att resultera i att återuppringningen får nyckeln istället för värdet för varje element i arrayen, eller både värde och nyckel som dess argument. Om du till exempel vill hantera index istället för värden:

$numbers = [16,3,5,8,1,4,6];

$even_indexed_numbers = array_filter($numbers, function($index) {
    return $index % 2 === 0;
}, ARRAY_FILTER_USE_KEY);

Index i filtrerad matris

Observera att array_filter bevarar de ursprungliga matrisnycklarna. Ett vanligt misstag skulle vara att prova en användning for loop över den filtrerade matrisen:

<?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
*/

Detta händer eftersom värdena som låg på position 1 (det fanns 0 ), 3 ( null ), 5 (tom sträng '' ) och 7 (tom matris [] ) togs bort tillsammans med motsvarande indexknappar.

Om du behöver slinga igenom resultatet av ett filter på en indexerad matris, bör du först ringa array_values på resultatet av array_filter för att skapa en ny matris med rätt index:

$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!

Lägga till element till start av array

Ibland vill du lägga till ett element i början av en matris utan att ändra några av de aktuella elementen ( ordning ) i matrisen . När så är fallet kan du använda array_unshift() .

array_unshift() beror överförde element till framsidan av matrisen. Observera att listan över element är förberedda som en helhet, så att de förhöjda elementen förblir i samma ordning. Alla numeriska array-tangenter kommer att ändras för att börja räkna från noll medan bokstavliga knappar inte kommer att beröras.

Hämtad från PHP-dokumentationen för array_unshift() .

Om du vill uppnå detta är allt du behöver göra följande:

$myArray = array(1, 2, 3);

array_unshift($myArray, 4);

Detta kommer nu att lägga till 4 som det första elementet i din matris. Du kan verifiera detta genom att:

print_r($myArray);

Detta returnerar en matris i följande ordning: 4, 1, 2, 3 .

Eftersom array_unshift tvingar matrisen att återställa nyckelvärdesparna när det nya elementet låter följande poster ha nycklarna n+1 är det smartare att skapa en ny matris och lägga till den befintliga matrisen till den nyskapade arrayen.

Exempel:

$myArray = array('apples', 'bananas', 'pears');
$myElement = array('oranges');
$joinedArray = $myElement;

foreach ($myArray as $i) {
  $joinedArray[] = $i;
}

Output ($ joinedArray):

Array ( [0] => oranges [1] => apples [2] => bananas [3] => pears ) 

Eaxmple / Demo

Vitlista bara några matrisnycklar

När du bara vill tillåta vissa nycklar i matriserna, särskilt när matrisen kommer från förfrågningsparametrar, kan du använda array_intersect_key tillsammans med 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]

Om parameters variabeln inte innehåller någon tillåten nyckel, då filteredParameters variabeln kommer att bestå av en tom array.

Sedan PHP 5.6 kan du använda array_filter för den här uppgiften också genom att skicka ARRAY_FILTER_USE_KEY flaggan som den tredje parametern:

$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
);

Att använda array_filter ger den extra flexibiliteten att utföra ett godtyckligt test mot nyckeln, till exempel kan $allowedKeys innehålla regex-mönster istället för vanliga strängar. Det anger också mer tydligt avsikten med koden än array_intersect_key() kombination med array_flip() .

Sortera en matris

Det finns flera sorteringsfunktioner för matriser i php:

sortera()

Sortera en matris i stigande ordning efter värde.

$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
sort($fruits);
print_r($fruits);

resulterar i

Array
(
    [0] => Apfel
    [1] => Banane
    [2] => Orange
    [3] => Zitrone
)

rsort ()

Sortera en matris i fallande ordning efter värde.

$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
rsort($fruits);
print_r($fruits);

resulterar i

Array
(
    [0] => Zitrone
    [1] => Orange
    [2] => Banane
    [3] => Apfel
)

en sort()

Sortera en matris i stigande ordning efter värde och bevara indecierna.

$fruits = [1 => 'lemon', 2 => 'orange',  3 => 'banana', 4 => 'apple'];
asort($fruits);
print_r($fruits);

resulterar i

Array
(
    [4] => apple
    [3] => banana
    [1] => lemon
    [2] => orange
)

arsort ()

Sortera en matris i fallande ordning efter värde och bevara indecierna.

$fruits = [1 => 'lemon', 2 => 'orange',  3 => 'banana', 4 => 'apple'];
arsort($fruits);
print_r($fruits);

resulterar i

Array
(
    [2] => orange
    [1] => lemon
    [3] => banana
    [4] => apple
)

ksort ()

Sortera en matris i stigande ordning efter nyckel

$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
ksort($fruits);
print_r($fruits);

resulterar i

Array
(
    [a] => orange
    [b] => banana
    [c] => apple
    [d] => lemon
)

krsort ()

Sortera en matris i fallande ordning efter nyckel.

$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
krsort($fruits);
print_r($fruits);

resulterar i

Array
(
    [d] => lemon
    [c] => apple
    [b] => banana
    [a] => orange
)

natsort ()

Sortera en matris på ett sätt som en människa skulle göra (naturlig ordning).

$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natsort($files);
print_r($files);

resulterar i

Array
(
    [4] => File2.stack
    [0] => File8.stack
    [2] => file7.stack
    [3] => file13.stack
    [1] => file77.stack
)

natcasesort ()

Sortera en matris på ett sätt som en människa skulle göra (naturlig ordning), men skiftlägeskänslig

$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natcasesort($files);
print_r($files);

resulterar i

Array
(
    [4] => File2.stack
    [2] => file7.stack
    [0] => File8.stack
    [3] => file13.stack
    [1] => file77.stack
)

blanda()

Blandar en matris (sorteras slumpmässigt).

$array = ['aa', 'bb', 'cc'];
shuffle($array);
print_r($array);

Som skrivet i beskrivningen är det slumpmässigt så här är bara ett exempel på vad den kan resultera

Array
(
    [0] => cc
    [1] => bb
    [2] => aa
)

usort ()

Sortera en matris med en användardefinierad jämförelsefunktion.

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);

resulterar i

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 5
    [4] => 6
)

uasort ()

Sortera en matris med en användardefinierad jämförelsefunktion och bevara tangenterna.

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);

resulterar i

Array
(
    [e] => -5
    [b] => -3
    [a] => 1
    [d] => 3
    [c] => 5
)

uksort ()

Sortera en matris efter tangenter med en användardefinierad jämförelsefunktion.

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);

resulterar i

Array
(
    [ee] => 1
    [g] => -3
    [k] => 3
    [oo] => -5
    [4] => 5
)

Byt ut värden med nycklar

array_flip funktionen kommer att utbyta alla tangenter med dess element.

$colors = array(
    'one' => 'red',
    'two' => 'blue',
    'three' => 'yellow',
);

array_flip($colors); //will output

array(
    'red' => 'one',
    'blue' => 'two',
    'yellow' => 'three'
)

Slå samman två matriser i en grupp

$a1 = array("red","green");
$a2 = array("blue","yellow");
print_r(array_merge($a1,$a2));

/*
    Array ( [0] => red [1] => green [2] => blue [3] => yellow )
*/

Associativ matris:

$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. Slår samman elementen i en eller flera arrayer så att värdena på en läggs till i slutet av den föregående. Den returnerar den resulterande matrisen.
  2. Om ingångsmatriserna har samma strängnycklar, kommer det senare värdet för den tangenten att skriva över den föregående. Om emellertid matriserna innehåller sifferknappar kommer det senare värdet inte att skriva över det ursprungliga värdet utan läggs till.
  3. Värden i inmatningsfältet med siffertangenter kommer att numreras om med inkrementeringstangenter som börjar från noll i resultatfältet.


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow