すべての3つ、array_filter、array_map、及びarray_walk、ほとんど同じ方法で配列をループにforeachループをコールバック関数を使用$arrayをループします。$key =>$valueのペアを使用します。
この投稿の期間中、私は元の配列を参照して、$array、ループ内の現在の項目のインデックスとして、$keyと現在の項目の値を渡しますループ内では、$valueとなります。
は、レコードを選択しても変更しないMySQLのSELECTクエリに似ています。
array_filterのコールバックは、現在のループアイテムの$valueに渡され、コールバックが返すものはブール値として扱われます。
真の場合の場合、その項目は結果に含まれます。
偽の場合、その項目は結果から除外されます。
したがって、あなたが行う可能性があります:
<pre><?php
$users=array('user1'=>array('logged_in'=>'Y'),'user2'=>array('logged_in'=>'N'),'user3'=>array('logged_in'=>'Y'),'user4'=>array('logged_in'=>'Y'),'user5'=>array('logged_in'=>'N'));
function signedIn($value)
{
if($value['logged_in']=='Y')return true;
return false;
}
$signedInUsers=array_filter($users,'signedIn');
print_r($signedInUsers);//Array ([user1] => Array ([logged_in] => Y) [user3] => Array ([logged_in] => Y) [user4] => Array ([logged_in] => Y))
?></pre>
array_map一方では、引数として複数の配列を受け入れます。 1つの配列が指定されている場合、ループ内の現在の項目の$値がコールバックに送信されます。 2つの以上のアレイが使用されている場合は、すべての配列がdocumentationで述べたように最初array_valuesを通過する必要があります
配列引数が文字列のキーが含まれている場合にのみ、その後、返される配列 は、文字列キーが含まれています厳密に1つの配列が渡された場合。 つ以上の引数が返される配列は常に 整数キー
最初の配列を介してループし、その値は、その最初のパラメータとしてコールバックに渡され、二番目の配列は、それを指定された場合を持つ次に渡された場合もループされ、その値は2番目のパラメータとしてコールバックに送信され、その他の各パラメータについても同様に送信されます。 documentationで述べたよう
配列の長さが一致しない場合は、最大のアレイが、使用されている:
二つ以上の配列を使用する場合、通常、それらは、コールバック関数ので等しい長 であるべきです対応する要素に並列に適用されます。配列の長さが等しくない場合は、 のものが空の要素で拡張され、 の長さに最も一致します。
コールバックが呼び出されるたびに、戻り値が収集されます。 キーは1つの配列で作業する場合にのみ保持され、array_mapは結果の配列を返します。 2つ以上の配列を操作している場合、キーは失われ、代わりにコールバック結果が格納された新しい配列が返されます。 array_mapは、$キーではなく現在の項目の$値だけをコールバックに送信します。 キーが必要な場合は、追加の引数としてarray_keys($array)
を渡すことができます。コールバックには、$ keyと$ valueの両方が渡されます。
しかし、複数の配列を使用する場合、array_valuesがキーを破棄するのとほぼ同じ方法で元のキーが失われます。 キーを保存する必要がある場合は、元の配列のキーを取得するのにarray_keysを使用し、array_mapの結果から値を取得するか、array_mapの結果を直接使用することができます。次にarray_combineを使用して2つを結合します。
このようにあなたが行う可能性があります:コールバックがキーと値の両方を送信することで
<pre><?php
$array=array('apple'=>'a','orange'=>'o');
function fn($key,$value)
{
return $value.' is for '.$key;
}
$result=array_map('fn',array_keys($array),$array);
print_r($result);//Array ([0] => a is for apple [1] => o is for orange)
print_r(array_combine(array_keys($array),$result));//Array ([apple] => a is for apple [orange] => o is for orange)
?></pre>
array_walkはforeach($array as $key=>$value)
と非常によく似ています。コールバックに3番目の引数を直接渡す場合は、オプションの引数も受け入れます。
array_walkは、ループが正常に完了したかどうかを示すブール値を返します。
(私はまだそれを実際に使用しています)
注意:array_walkはコールバックの戻り値を使用しません。 array_walkがブール値を返すので、array_walkが何かに影響を与えるためには、を参照する必要があります。& $ valueを参照する必要があります。グローバル配列を変更または使用する必要があります。 また、グローバルスコープを汚染したくない場合は、array_walkのオプションの第3引数を使用して、書き込む変数への参照を渡すことができます。
<pre><?php
$readArray=array(1=>'January',2=>'February',3=>'March',4=>'April',5=>'May',6=>'June',7=>'July',8=>'August',9=>'September',10=>'October',11=>'November',12=>'December');
$writeArray=array();
function fn($value,$key,&$writeArray)
{
$writeArray[$key]=substr($value,0,3);
}
array_walk($readArray,'fn',&$writeArray);
print_r($writeArray);//Array ([1] => Jan [2] => Feb [3] => Mar [4] => Apr [5] => May [6] => Jun [7] => Jul [8] => Aug [9] => Sep [10] => Oct [11] => Nov [12] => Dec)
?></pre>
文書をお読みになりましたか? – sectus