2017-10-16 35 views
0

こんにちは私は以下の構造を有する二つの配列含む配列:PHPで連想配列のキーから特定のレコードを削除する

categories [ 
    "lvl0" => array:2 [ 
    0 => "Cleaning" 
    1 => "Bread" 
    ] 
    "lvl1" => array:2 [ 
    0 => null 
    1 => "Bread > rolls" 
    ] 
] 

は、私が「LVL1」配列からNULLのすべてのレコードを削除したいのが、これを行う正しい方法を見つけることができませんでした。

array_filter($categories['lvl1']) 

をしかし、これはまた、LVL1だけではなく、NULLのものに関連するすべてのレコードを削除します。

私が試してみました。

ご協力いただければ幸いです。

おかげ

+1

'array_combine(array_keys($カテゴリ)、array_mapを( 'array_filter'、$カテゴリ))' ' – apokryfos

+0

$カテゴリ[ 'LVL1'] = array_filter($カテゴリ[ 'LVL1'])'? –

+2

'array_filter($ categories ['lvl1'])'を使ったコンテキストを表示するコードを少し追加できますか? _空でない値は削除しないでください。 –

答えて

0

ロビーエーヴリルで自分の投稿にコメント次の問題を解決した:

$categories['lvl1'] = array_filter($categories['lvl1']); 
0

array_filter()は、2番目の引数としてコールバックを取ります。これを指定しないと、ブール値falseと等しくないレコードのみが返されます。空の値を削除する単純なコールバックを提供することができます。

array_filter()も(参照ではなく)配列のコピーを使用するため、戻り値を使用する必要があります。例えば

戻ります
$categories = [ 
    "lvl0" => [ 
    "Cleaning", 
    "Bread" 
    ], 
    "lvl1" => [ 
    null, 
    "Bread > rolls" 
    ] 
]; 

$lvl1 = array_filter($categories['lvl1'], function($value) { 
    return !empty($value); 
}); 

var_dump($lvl1); 

array(1) { 
    [1] => 
    string(13) "Bread > rolls" 
} 
+0

コールバックで 'return!empty($ value);'を使うと、実際にはコールバックを使わない場合と同じ効果があります。 –

+0

技術的には、確かに。しかし、コールバックを変更する方法を彼に示すものではないので、あまり有益でもありません。 –

0

私はnullをフィルタリングするために配列のキーを必要とarray_filter()連想配列のために私の最後の作業day.Generallyで同じ問題を抱えていました、falseなどの値。しかし、この小さな関数は連想配列キーを知らなくてもNULLの値をフィルタリングするのに役立ちます。これはまた、あなたを助けることを願っています、https://eval.in/881229

コード:

function array_filter_recursive($input) 
    { 
    foreach ($input as &$value) 
    { 
     if (is_array($value)) 
     { 
     $value = array_filter_recursive($value); 
     } 
    } 

    return array_filter($input); 
    } 

$categories = [ 
    "lvl0" => [ 
    "Cleaning", 
    "Bread" 
    ], 
    "lvl1" => [ 
    null, 
    "Bread > rolls" 
    ] 
]; 

$result = array_filter_recursive($categories); 
print '<pre>'; 
print_r($result); 
print '</pre>'; 

出力:

(
    [lvl0] => Array 
     (
      [0] => Cleaning 
      [1] => Bread 
     ) 

    [lvl1] => Array 
     (
      [1] => Bread > rolls 
     ) 

) 

参考:http://php.net/manual/en/function.array-filter.php#87581

関連する問題