如何过滤这个多维数组?

时间:2015-01-13 05:06:25

标签: php

这是我的输入数组:

INPUT:

$input["a"]["b"]["UK"] = 96 ;
$input["a"]["c"]["UK"] = 69 ;
$input["a"]["bp"]["USA"] = 29 ;
$input["a"]["c"]["USA"] = 59 ;
$input["a"]["dd"]["UK"] = 31 ;
$input["a"]["cg"]["UK"] = 38 ;

我想获得一个只包含[“USA”]的新数组。所以输出必须是..............

输出:

$output["a"]["bp"]["USA"] = 29 ;
$output["a"]["c"]["USA"] = 59 ;

是否可能?

3 个答案:

答案 0 :(得分:5)

这样可行。

$input["a"]["b"]["UK"]   = 96 ;    
$input["a"]["c"]["UK"]   = 69 ;
$input["a"]["bp"]["USA"] = 29 ;
$input["a"]["c"]["USA"]  = 59 ;
$input["a"]["dd"]["UK"]  = 31 ;
$input["a"]["cg"]["UK"]  = 38 ;
$tempResult = array();

foreach($input as $key => $value){

    foreach($value as $subkey => $subvalue){

        foreach($subvalue as $finalkey => $finalvalue){

            if($finalkey == 'USA') {

                $tempResult[$key][$subkey][$finalkey] = $finalvalue;
            }
        }
    }
}

echo '<pre>';print_r($tempResult);echo '</pre>';

答案 1 :(得分:3)

<?php
$input["a"]["b"]["UK"] = 96 ;
$input["a"]["c"]["UK"] = 69 ;
$input["a"]["bp"]["USA"] = 29 ;
$input["a"]["c"]["USA"] = 59 ;
$input["a"]["dd"]["UK"] = 31 ;
$input["a"]["cg"]["UK"] = 38 ;

foreach($input as $x => $y) {
    foreach($y as $zz => $r) {
        foreach($r as $xxx => $j) {
            if($xxx == "USA") {
                echo($j);
            }
        }
    }
}
?>

user2944231更干净我想但是你

答案 2 :(得分:3)

最直接的答案是使用foreach循环:

$input=array();
$output=array();
$input["a"]["b"]["UK"] = 96 ;
$input["a"]["c"]["UK"] = 69 ;
$input["a"]["bp"]["USA"] = 29 ;
$input["a"]["c"]["USA"] = 59 ;
$input["a"]["dd"]["UK"] = 31 ;
$input["a"]["cg"]["UK"] = 38 ;

//get the level 0 keys (e.g. a) level 0 value (e.g array("b"=>array("UK"=>96)) )
foreach($input as $level_0_key => $level_0_value)
{
    //get the level 1 keys (e.g. b) level 1 value (e.g array("UK"=>96) )
    foreach($level_0_value as $level_1_key => $level_1_value)
    {
        //get the level 2 keys (e.g. UK) level 2 value (e.g 96)
        foreach($level_1_value as $level_2_key => $level_2_value)
        {
            if($level_2_key=="USA")
            {
                $output[$level_0_key][$level_1_key][$level_2_key]=$level_2_value;
            }
        }
    }
}
print_r($output);