2015-08-24 41 views
2

我知道这个问题被问及许多次,我已经搜索了足够多的结果,但迄今没有取得成功。如何从二维数组元素中检查空单个数组元素PHP

让说,我有这种类型的数组:

1 ~~~ 
1 ### 
Array ([macro_ratio] => 1.1 [foodCategoryId] => 37) @@@ 
2 ### 
Array ([macro_ratio] => 1.2 [foodCategoryId] => 2) @@@ 
3 ### 
Array ([macro_ratio] => 1.3 [foodCategoryId] => 3) @@@ 
4 ### 
Array ([macro_ratio] => [foodCategoryId] => 4) @@@ 
5 ### 
Array ([macro_ratio] => [foodCategoryId] => 5) @@@ 
6 ### 
Array ([macro_ratio] => [foodCategoryId] => 6) @@@ 
7 ### 
Array ([macro_ratio] => [foodCategoryId] => 7) @@@ 
8 ### 
Array ([macro_ratio] => [foodCategoryId] => 8) @@@ 
9 ### 
Array ([macro_ratio] => [foodCategoryId] => 9) @@@ 
10 ### 
Array ([macro_ratio] => [foodCategoryId] => 38) @@@ 
11 ### 
Array ([macro_ratio] => [foodCategoryId] => 10) @@@ 
12 ### 
Array ([macro_ratio] => [foodCategoryId] => 11) @@@ 
13 ### 
Array ([macro_ratio] => [foodCategoryId] => 12) @@@ 
14 ### 
Array ([macro_ratio] => [foodCategoryId] => 13) @@@ 
15 ### 
Array ([macro_ratio] => [foodCategoryId] => 14) @@@ 
16 ### 
Array ([macro_ratio] => [foodCategoryId] => 15) @@@ 
17 ### 
Array ([macro_ratio] => [foodCategoryId] => 16) @@@ 
18 ### 
Array ([macro_ratio] => [foodCategoryId] => 17) @@@ 
19 ### 
Array ([macro_ratio] => [foodCategoryId] => 39) @@@ 
20 ### 
Array ([macro_ratio] => [foodCategoryId] => 18) @@@ 
21 ### 
Array ([macro_ratio] => [foodCategoryId] => 19) @@@ 
22 ### 
Array ([macro_ratio] => [foodCategoryId] => 20) @@@ 
23 ### 
Array ([macro_ratio] => [foodCategoryId] => 21) @@@ 
24 ### 
Array ([macro_ratio] => [foodCategoryId] => 22) @@@ 
25 ### 
Array ([macro_ratio] => [foodCategoryId] => 23) @@@ 
26 ### 
Array ([macro_ratio] => [foodCategoryId] => 24) @@@ 
27 ### 
Array ([macro_ratio] => [foodCategoryId] => 25) @@@ 
28 ### 
Array ([macro_ratio] => [foodCategoryId] => 40) @@@ 
29 ### 
Array ([macro_ratio] => [foodCategoryId] => 41) @@@ 
30 ### 
Array ([macro_ratio] => [foodCategoryId] => 26) @@@ 
31 ### 
Array ([macro_ratio] => [foodCategoryId] => 27) @@@ 
32 ### 
Array ([macro_ratio] => [foodCategoryId] => 28) @@@ 
33 ### 
Array ([macro_ratio] => [foodCategoryId] => 29) @@@ 
34 ### 
Array ([macro_ratio] => [foodCategoryId] => 30) @@@ 
35 ### 
Array ([macro_ratio] => [foodCategoryId] => 34) @@@ 
36 ### 
Array ([macro_ratio] => [foodCategoryId] => 35) @@@ 
37 ### 
Array ([macro_ratio] => [foodCategoryId] => 36) @@@ 
2 ~~~ 
1 ### 
Array ([macro_ratio] => 2.1 [foodCategoryId] => 37) @@@ 
2 ### 
Array ([macro_ratio] => 2.2 [foodCategoryId] => 2) @@@ 
3 ### 
Array ([macro_ratio] => 2.3 [foodCategoryId] => 3) @@@ 
4 ### 
Array ([macro_ratio] => [foodCategoryId] => 4) @@@ 
5 ### 
Array ([macro_ratio] => [foodCategoryId] => 5) @@@ 
6 ### 
Array ([macro_ratio] => [foodCategoryId] => 6) @@@ 
7 ### 
Array ([macro_ratio] => [foodCategoryId] => 7) @@@ 
8 ### 
Array ([macro_ratio] => [foodCategoryId] => 8) @@@ 
9 ### 
Array ([macro_ratio] => [foodCategoryId] => 9) @@@ 
10 ### 
Array ([macro_ratio] => [foodCategoryId] => 38) @@@ 
11 ### 
Array ([macro_ratio] => [foodCategoryId] => 10) @@@ 
12 ### 
Array ([macro_ratio] => [foodCategoryId] => 11) @@@ 
13 ### 
Array ([macro_ratio] => [foodCategoryId] => 12) @@@ 
14 ### 
Array ([macro_ratio] => [foodCategoryId] => 13) @@@ 
15 ### 
Array ([macro_ratio] => [foodCategoryId] => 14) @@@ 
16 ### 
Array ([macro_ratio] => [foodCategoryId] => 15) @@@ 
17 ### 
Array ([macro_ratio] => [foodCategoryId] => 16) @@@ 
18 ### 
Array ([macro_ratio] => [foodCategoryId] => 17) @@@ 
19 ### 
Array ([macro_ratio] => [foodCategoryId] => 39) @@@ 
20 ### 
Array ([macro_ratio] => [foodCategoryId] => 18) @@@ 
21 ### 
Array ([macro_ratio] => [foodCategoryId] => 19) @@@ 
22 ### 
Array ([macro_ratio] => [foodCategoryId] => 20) @@@ 
23 ### 
Array ([macro_ratio] => [foodCategoryId] => 21) @@@ 
24 ### 
Array ([macro_ratio] => [foodCategoryId] => 22) @@@ 
25 ### 
Array ([macro_ratio] => [foodCategoryId] => 23) @@@ 
26 ### 
Array ([macro_ratio] => [foodCategoryId] => 24) @@@ 
27 ### 
Array ([macro_ratio] => [foodCategoryId] => 25) @@@ 
28 ### 
Array ([macro_ratio] => [foodCategoryId] => 40) @@@ 
29 ### 
Array ([macro_ratio] => [foodCategoryId] => 41) @@@ 
30 ### 
Array ([macro_ratio] => [foodCategoryId] => 26) @@@ 
31 ### 
Array ([macro_ratio] => [foodCategoryId] => 27) @@@ 
32 ### 
Array ([macro_ratio] => [foodCategoryId] => 28) @@@ 
33 ### 
Array ([macro_ratio] => [foodCategoryId] => 29) @@@ 
34 ### 
Array ([macro_ratio] => [foodCategoryId] => 30) @@@ 
35 ### 
Array ([macro_ratio] => [foodCategoryId] => 34) @@@ 
36 ### 
Array ([macro_ratio] => [foodCategoryId] => 35) @@@ 
37 ### 
Array ([macro_ratio] => [foodCategoryId] => 36) @@@ 

这个数组我想省略/跳过Array ([macro_ratio] => [foodCategoryId] => 36) @@@元素进行排序的意思是如果[macro_ratio] =>空的,所以我想跳过列的是整个元素。

我工作的代码是:

foreach ($_POST['mealData'] as $key => $value) { 
      print_r($key); 
      echo " ~~~<br>"; 

      foreach ($value as $key => $value) { 
       print_r($key); 
       echo " ###<br>"; 
       print_r($value); 
       echo " @@@<br>"; 
       if (isset($value['macro_ratio']) === true && empty($value['macro_ratio']) === true && isset($value['foodCategoryId']) === true && empty($value['foodCategoryId']) === true) { 
        print_r($value); 
       } 
      } 
     } 
+0

什么是macro_ratio?这是一个关键? – aldrin27

+0

是的,这是关键。 'print_r($ value);'包含上面所有的数组输出。数组([macro_ratio] => 1.1 [foodCategoryId] => 37) Array([macro_ratio] => 1.1 [foodCategoryId] => 37) Array([macro_ratio] => 1.2 [foodCategoryId] =>数组([macro_ratio] => 1.2 [foodCategoryId] => 2) Array([macro_ratio] => 1.3 [foodCategoryId] => 3) Array ([macro_ratio] => [foodCategoryId] => 4)' – LearningROR

回答

1

值返回经过滤的阵列macro_ratio和foodCategoryId都是键,你可以在第一个循环后访问。 if语句将检查是否设置了macro_ratio而不是空的。 更改您的代码这一点,它应该工作

$data = array(// first loop to access this level 
array(// second loop to access this level, 
    'macro_ratio' => 1.2 // check if index macro_ratio is set and not empty 
    'foodCategoryId' => 2), 
array(
    'macro_ratio' => 2 
    'foodCategoryId' => 4) 
) 
foreach ($_POST['mealData'] as $k1 => $v1) { 

foreach ($value as $k2 => $v2) { 
    check if index macro_ratio is set and not empty 
    if (isset($value2['macro_ratio']) && !empty($value2['macro_ratio'])) { 
     echo $value2['foodCategoryId']; 
    }   
} 
} 
+0

代码没有输出。 – LearningROR

+0

已更新的答案。 – mdamia

+0

谢谢。它运作良好。 – LearningROR

1

试试这个,如果它工作

foreach ($_POST['mealData'] as $key => $value) { 
     print_r($key); 
     echo " ~~~<br>"; 
     if(!empty($value['macro_ratio'])){ 
      foreach($value as $key2 => $value2) { 
       print_r($value2); 
      } 
     }     

    } 
+0

output is:'1 ~~~ 2 ~~~' – LearningROR

+0

是'print_r($ value2);'? 1 ~~~ 2 ~~~输出? – aldrin27

+0

是的,它没有输出任何东西,只是上面的代码。 – LearningROR

1

这是做它的另一种方式。在foreach循环之前过滤数组。 array_filter与自定义回调将做到这一点。

这将通过在阵列中检查每个元件以确保长度的['macro_ratio']大于0。使用​​strlen的,而不是空仍将允许的0

$filteredArray = array_filter($array, function($value) { 
    return (strlen($value['macro_ratio'])); 
}); 
1

希望这个作品......这是最简单的方法。

<?php 
$result = array(); 
foreach ($_POST['mealData'] as $key => $value){ 
    if(empty($value["macro_ratio"])) 
     continue; 
    else 
     $result[$key] = $value; 
} 
var_dump($result); 
+0

输出是:'array(0){}' – LearningROR

+0

@LearningROR它在我的本地主机上运行良好。 http://i.imgur.com/fweNJD6.jpg – Zerquix18