PHP
Manipulera en matris
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.
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 )
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 )
*/
- 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.
- 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.
- Värden i inmatningsfältet med siffertangenter kommer att numreras om med inkrementeringstangenter som börjar från noll i resultatfältet.