-1

array_filterを使用して、多次元配列の特定の条件をチェックし、if()ステートメントを置き換えることはできますか?

次のようなものを置き換えたい:

if($item[0] == $key && $item[1] == "Test"){
    //do something here....
}else{
    //some other code here...
}

現在のアレイ:

Array
(
    [Zone] => Array
        (
            [Type] => s45
            [packageA1] => Array
                (
                    [level] => REMOVE FROM DB
                    [stage] => REMOVE FROM DB
                    [description] => description goes here
                    [image] => NULL
                )

        )
)

FIRSTを検索して、[Type]が存在するかどうかを確認したいと思います。それが存在しない場合は、array_spliceを使用して既存の配列に挿入するのは悪いと思います。存在する場合は、[packageA1]が存在するかどうかを確認し、[packageA1]が存在しない場合は、array_spliceをもう一度使用します。[packageA1]が存在する場合、挿入する場合は任意のタイプをスキップします。

それは理にかなっていますか?

4

1 に答える 1

0

array_filter配列の内容に基づいてブール論理を置き換えるのではなく、配列をフィルタリングするために設計されています。

array_filter2つのパラメータを取ります-inputcallback

このcallback関数は、単一のパラメーター(配列からの項目)を受け取り、またはのいずれtrueかを返す必要がありfalseます。この関数は、返されたすべてのアイテムが削除された配列を返しますfalse

callback関数が指定されていない場合、等しいすべての項目falseが結果の配列から削除されます。)

編集:

更新されたテキストに基づいて、以下のコードはあなたが望むことをするはずです:

if (!$item['Zone']['Type']) {
    $item['Zone']['Type'] = $something;
}
if (!$item['Zone']['packageA1']) {
    !$item['Zone']['packageA1'] = $something;
}

$something明らかに、実際に追加したいものに置き換える必要があります。

このコードは、三項演算子を使用することで短縮できます。

PHP 5.3以降を実行している場合は、次の操作を実行できます。

$item['Zone']['Type'] = $item['Zone']['Type'] ?: $something;
$item['Zone']['packageA1'] = $item['Zone']['packageA1'] ?: $something;

5.3より前では、三項演算の途中を見逃すことはできず、次のように完全な形式を使用する必要があります。

$value = conditon ? if_true : if_false;

?:私の例のように使用する場合、「condition」と「if_true」は同じ値を取ります。)

完全な三項演算子(5.3より前のPHPの場合)は次のようになります。

$item['Zone']['packageA1'] = $item['Zone']['packageA1'] ? $item['Zone']['packageA1'] : $something;
于 2012-11-08T16:05:15.753 に答える