2017-07-14 107 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]); 
    } 
}