2017-07-14 6 views
0

私は、次の配列を持っている: -PHPは:でネストされた配列を削除するだけで1キー

array(3) { 
    [1]=> 
    array(1) { 
    ["A"]=> 
    float(5) 
    } 
    [2]=> 
    array(2) { 
    ["A"]=> 
    float(1) 
    ["B"]=> 
    float(3) 
    } 
    [3]=> 
    array(2) { 
    ["A"]=> 
    float(5) 
    ["B"]=> 
    float(6) 
    } 
} 

そして、私は/削除のみストア1つの鍵、それはこのように終わるだろうように、ネストされた配列をフィルタリングしたいと思います: -

array(2) { 
    [2]=> 
    array(2) { 
    ["A"]=> 
    float(1) 
    ["B"]=> 
    float(3) 
    } 
    [3]=> 
    array(2) { 
    ["A"]=> 
    float(5) 
    ["B"]=> 
    float(6) 
    } 
} 

これを行う簡単な方法はありますか?

+4

'count'と組み合わせた' array_filter' ... – deceze

+1

はい、これを実行する簡単な方法/方法があります。何か試しましたか? – axiac

+0

特定のキー(["A"])でarray_filterを使用して、それらが空であるかどうかを確認して削除しましたが、キー "C"がある可能性があるため、これは理想的ではないと思いましたすべてのフィルタを手動で – ubik

答えて

1

シンプルforeach()ています: -

foreach($array as $key=>$arr){ 
    if(count($arr) == 1){ 
     unset($array[$key]); 
    } 
} 

print_r($array); 

出力: - https://eval.in/832446

またはarray_filter使用: - :私はhttps://eval.in/832451

+0

ありがとう!完璧に動作します。私はforループと同様のものを試しましたが、うまくいかなかったようです。 – ubik

+1

@ubikあなたを助けてうれしい:) :) –

1

最も平凡な方法 -

$newarray = array_filter($array, function($var) { 
    return (count($var) !=1); 
}); 

出力をこのアクターのために考えることができるカウントはPHPという関数を使用します。

あなたが定義されているとして、あなたの配列とさせて頂きますと、$ originalArray-

array(3) { 
    [1]=> 
    array(1) { 
    ["A"]=> 
    float(5) 
    } 
    [2]=> 
    array(2) { 
    ["A"]=> 
    float(1) 
    ["B"]=> 
    float(3) 
    } 
    [3]=> 
    array(2) { 
    ["A"]=> 
    float(5) 
    ["B"]=> 
    float(6) 
    } 
} 

今、私たちは複数のキーを持つインデックスを見つけるために、配列全体を反復処理し、異なるアレイ上にそれらをプッシュします、それを呼び出すことができます。

$new_array = array(); 

for($i=0;$i<count($originalArray);$i++) 
{ 
    if(count($originalArray[$i])>1) 
    { 
    array_push($new_array,$originalArray[$i]); 
    } 
} 
関連する問題