2017-07-14 114 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

'array_filter'結合'count' ... – deceze

+1

是的,有一個簡單的解決方案/方法來做到這一點。你有嘗試過什麼嗎? – axiac

+0

我用array_filter與特定的鍵([「A」])來檢查它們是否爲空並將它們移除,但我認爲這不太理想,因爲可能還有一個鍵「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: -

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

輸出: - https://eval.in/832451

+0

非常感謝!完美的作品。我嘗試了類似的for循環,但它似乎從來沒有工作。 – ubik

+1

@ubik很高興幫助你:) :) –

1

最微不足道的方法,我可以想到這個acti vity是使用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]); 
    } 
}