サーチ…
配列からの要素の削除
配列内の要素、例えばインデックスが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']);
今、$果物は
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
関数は、フィルタリングされる配列を最初の引数として受け取り、フィルタ述語を2番目の引数として定義するコールバックを受け取ります。
インデックスによるフィルタリング
array_filter
関数に3番目のパラメータを指定すると、どの値をコールバックに渡すかを調整できます。このパラメータはARRAY_FILTER_USE_KEY
またはARRAY_FILTER_USE_BOTH
いずれかに設定することができます。これにより、コールバックは配列の各要素の値の代わりにキーを受け取るか、valueとkeyを引数として受け取ります。たとえば、インデックスを扱う場合は値の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_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()
は渡された要素を配列の先頭に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;
}
出力($ joinedArray):
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
変数は空の配列で構成filteredParameters
ます。
PHP 5.6以降、 ARRAY_FILTER_USE_KEY
フラグを3番目のパラメータとして渡して、このタスクにもarray_filter
を使用できます。
$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()
valueで降順で配列をソートし、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);
説明に書かれているように、それはランダムなので、ここでは結果として得られるものは1つだけです
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'
)
2つの配列を1つの配列にマージする
$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 )
*/
- 1つ以上の配列の要素を結合して、1つの配列の値が前の配列の末尾に追加されるようにします。結果の配列を返します。
- 入力配列に同じ文字列キーがある場合、そのキーの後の値は前の値を上書きします。ただし、配列に数値キーが含まれている場合、後の値は元の値を上書きしませんが、追加されます。
- 入力配列の数値キーによる値は、結果配列のゼロから始まるインクリメントキーの番号が付け替えられます。