在PHP中提取多维数组中某种类型的值

时间:2016-01-07 23:13:14

标签: php arrays

有谁知道如何从更大的数组中提取某种类型的数组?例如,请考虑var_dump()的这些结果:

     [0]=>
      array(5) {
        ["post"]=>
        string(60) "Paris"
        ["capacity"]=>
        string(5) "58515"
        ["region"]=>
        string(60) "WHA"
        ["seats"]=>
        string(2) "55"
        ["growth"]=>
        string(4) "3880"
      }
      [1]=>
      array(5) {
        ["post"]=>
        string(60) "Tel Aviv"
        ["capacity"]=>
        string(6) "530910"
        ["region"]=>
        string(60) "NEA"
        ["seats"]=>
        string(2) "65"
        ["growth"]=>
        string(4) "3267"
      }
      [2]=>
      array(5) {
        ["post"]=>
        string(60) "Paris"
        ["capacity"]=>
        string(6) "962115"
        ["region"]=>
        string(60) "EUR"
        ["seats"]=>
        string(2) "11"
        ["growth"]=>
        string(4) "2660"
      }

我确信对于生活在第五维度的人来说这似乎很简单,但是我有一个时间提取数组,其中我的foreach()中的region =“WHA”尝试构建一个单独的数组世界卫生大会数据。

foreach($data as $keys => $datums){
    //Planning to build JSON string
    if($datums['region'] == "WHA"){
        //Some processing
    }
}

结果应如下所示:

  [0]=>
  array(5) {
    ["post"]=>
    string(60) "Paris"
    ["capacity"]=>
    string(5) "58515"
    ["region"]=>
    string(60) "WHA"
    ["seats"]=>
    string(2) "55"
    ["growth"]=>
    string(4) "3880"
  }

我已经尝试过各种不同的东西,比如看一下对我来说不起作用的array_filter,我只关心正确的方式。有任何想法吗?非常感激。

3 个答案:

答案 0 :(得分:1)

认为这应该修复你的代码。

foreach($data as $keys => $datums){
    //Planning to build JSON string
    if(isset($datums["region"]) && strcmp($datums["region"], "WHA") === 0){
        //Some processing
     }
 }

答案 1 :(得分:1)

如果我理解正确,我相信你想构建一个新数组,它只包含第一个通过测试的数组中的元素。以下示例执行此操作并生成该数据的JSON编码字符串:

$new = Array();
foreach($data as $key => $datum){
    //Planning to build JSON string
    if ( $datum['region']=='WHA') {
        $new[] = $datum;
    }
}
$out = json_encode($new);

答案 2 :(得分:1)

您也可以将其封装在函数

<?php
function filterArray($arr, $index, $filter) {
    foreach( $arr as $key=>$elem ) {
        if ( $elem[$index] != $filter ) {
            unset($arr[$key]);
            }
        }
    return $arr;
    }
?>

如果$YourArray是OP的数组,您可以使用它来过滤掉数组中没有“region”的索引元素的任何项目,该项目等于“WHA”

$filtered = filterArray($yourArray, "region", "WHA");

此替代版本将使用&符号(&amp;)将指针传递给原始数组。例如,如果您将此作为函数声明使用:

function filterArray(&$arr, $index, $filter) {

然后您不再需要为返回的数组设置目标,因为原始数组实际上是由函数直接修改的。

filterArray($yourArray, "region", "WHA");