php array_filter、array_map、array_walk解釈


1、array_filterは、配列内の各要素をコールバック関数で処理します.新しい要素ではなく、ある要素をフィルタリングすることに重点を置いています.要素を処理するとfalseが返されると、この要素はフィルタされます.PS:元のインデックスを保持しました. 
$arr = array(1,2,3,'aaa'=>4,5);
$newArr = array_filter($arr,function($val) {
    if ($val == 3) {
        return false; //   false           
    }
    return true; //     
});
print_r($newArr);

2、array_map関数ポテンシャルはarrayよりもwalkは、php内蔵関数のデフォルトが参照ではなく伝達される値であるため、intval()strtolower()などの内蔵関数を使用します.その時walkはどうしようもないarraymapはコールバック関数で配列の各要素を処理し、関数では各要素の値を変更することができ、どのような値が必要なのかに重点を置いて、どのような値を返し、インデックスを維持することができます.複数の配列を一度に処理できます.ただし、配列の数はコールバック関数のパラメータと一致する必要があります.
$arr = array(1,2,3,'aaa'=>4,5);
$newArr = array_map(function($val) {
    if ($val == 3) {
        $val *= $val;
    }
    return $val; //        ,         
},$arr);
print_r($newArr);

3、ps:処理された配列が2次元でない場合はarray_mapによる置換処理二次元配列用array_walk_recursive関数は、1次元配列を処理するときに、array_walk関数はパスリファレンスなので、大きな配列を処理するときの効率はarray_よりも高いかもしれません.mapは高いですか?array_walkは、配列内の各要素をコールバック関数で処理し、boolを返します.だから引用伝値に合わせて元の配列を直接変える必要がある.//マニュアルから抜粋したarrayの値のみを変更できます.ユーザーはコールバック関数で配列自体の構造を変更するべきではありません.//たとえば、ユニットの追加/削除、unsetユニットなどです.
$arr = array(1,2,3,'aaa'=>4,5);
array_walk($arr,function(&$val,$key) {
    if ($val == 3) {
        echo $key.'
'; $val = 33333; } }); print_r($arr);