相交的多维键

时间:2014-12-15 06:15:20

标签: php multidimensional-array

说我有两个数组:

$array1

Array
(
    [app] => Array
        (
            [name] => PunchClock
            [shifts] => Array
                (
                    [maxhours] => 16
                    [minhours] => 4
                )

            [con] => Array
                (
                    [moog] => 3
                )

        )

)

$array2

Array
(
    [app] => Array
        (
            [name] => 
        )

)

我试图找到一种方法来使用第二个数组,以便从第一个数组中获取相应的值。例如,如果我打电话:

$value = $array2['app']['name']

相应的值是PunchClock。如果我选择$array2['app']['shifts'],相应的值将返回包含maxhoursminhours的数组。我尝试过相交阵列,但没有到达任何地方。我在递归中运行它,但它变得非常混乱。我不知道此时还有哪些其他选择。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

你需要这样的东西吗?

function find($array1, $array2){
    foreach($array1 as $key => $value){
        if($value == null){
            return $array2[$key];
        } elseif(is_array($value)){
            return find($array2[$key], $value);
        } else {
            throw new Exception("value not found");
        }
    }
}

当你像这样使用它时:

$array1 = array(
        'app'=> array(
                'name' => 'punchClock',
                'shifts' => array(
                        )
                )
        );

$array2 = array(
        'app'=> array(
                'name' => null
        )
);
echo find($array1,$array2);

它会打印punchClock

答案 1 :(得分:0)

function array_intersect_keys_recursive($a, $b)
{
    $r = array();
    foreach ($a as $k => $v)
    {
        if (is_array($a[$k]) && isset($b[$k]) && is_array($b[$k]))
        {
            $r[$k] = array_intersect_keys_recursive($a[$k], $b[$k]);
            continue;
        }
        if (isset($a[$k]) && isset($b[$k]))
        {
            $r[$k] = $a[$k];
        }
    }
    return $r;
}

$a = Array
(
    'app' => Array
        (
            'name' => 'PunchClock',
            'shifts' => Array
                (
                    'maxhours' => 16,
                    'minhours' => 4
                ),

            'con' => Array
                (
                    'moog' => 3
                )

        )

);

$b = Array
(
    'app' => Array
        (
            'name' => ''
        )
);


$c = array_intersect_keys_recursive($a, $b);

print_r($c);

以上示例将输出:

Array
(
    [app] => Array
        (
            [name] => PunchClock
        )

)

答案 2 :(得分:0)

检查以下代码

$array1['app']['name'] = 'Punch Clock';
$array1['app']['shift'] = array("maxhours" => "16", "minhours", "4");
$array1['app']['con'] = 'Moog';


$array2['app']['shift'] = array("maxhours" => "16", "minhours", "4");
$result=array_intersect($array2,$array1);

输出

Array
(
    [app] => Array
        (
            [shift] => Array
                (
                    [maxhours] => 16
                    [0] => minhours
                    [1] => 4
                )

        )

)