代码之家  ›  专栏  ›  技术社区  ›  streetparade

检查具有不同键的数组?

  •  1
  • streetparade  · 技术社区  · 14 年前

    如何检查特定的数组键是否存在以及如何比较它们?

    1.数组如下所示。

    [33] => Array
                   (
                       [211] =>objectr
                           (
                               [name] => Test
                               [id]=>  211
                        )
                   )
    
    [23] => Array
                   (
                       [311] =>objectr
                           (
                               [name] => Tester
                               [id]=>  311
                        )
                   )
    

       [0] => 311
       [1] => 211
       [2] => 99
    

    现在我需要比较它们,得到它们的id。

    我要找的是这样的东西

       [0] => Tester
       [1] => Test
    

    我该怎么做?

    4 回复  |  直到 14 年前
        1
  •  2
  •   Lizard    14 年前

    array_key_exists - http://php.net/manual/en/function.array-key-exists.php

    foreach($first_array as $arr) {
        foreach($second_array as $key=>$val)
        {
            if (array_key_exists($val, $first_array)) {
                $final_array[$key] = $arr['name'];
            }
        }
    }
    

    array_search - http://uk.php.net/array_search

    foreach($first_array as $arr) {
        foreach($second_array as $val)
        {
            $key = array_search($val, $arr);
            if($key !== false) $final_array[$key] = $arr['name'];
        }
    }
    

    在这两种情况下,您都应该得到:

       [0] => Tester
       [1] => Test
    
        2
  •  2
  •   fabrik    14 年前

        3
  •  1
  •   Angel S. Moreno    14 年前

    我希望我能理解你的问题,可能会有语言障碍,但现在我们开始:

    所以基本上你有3个数组,你想用最后一个来检查第一个数组,看看那些值/键是否存在于第一个数组中?首先你要做的是将你的第一个数组重新构造成一个可以很容易翻译的数组来检查下两个数组的值和键。因此,让我们调用第一个数组$mapArray:

    foreach($mapArray as $mapObject){
        foreach($mapObject as $object){
            $mapList[$object->id] = $object->name;
        }
    }
    

    现在我们可以看到:

    [211] => 'test'
    [311] => 'tester'
    

    //given [0] => 311
    $keyExists = array_key_exists(311, $mapList); //returns true is the key exists
    echo $mapList[311]; //returns tester, the name for the id given
    

    //given [0] => 'test'
    $nameExists = in_array('test', $mapList);
    if($nameExists) echo array_search('test', $mapList); // returns 211
    

    希望这就是你想要的,或者至少能帮助你找到你想要的。

        4
  •  1
  •   Felix Kling    14 年前

    另一种方法:我们将第一个数组缩减为一维:

    $first = array();
    
    foreach($first_array as $val) {
       $first[key($val)] = current($val);
    }
    

    Array
    (
        [211] => Array
            (
                [name] => Test
                [id] => 211
            )
    
        [311] => Array
            (
                [name] => Tester
                [id] => 311
            )
    
    )
    

    然后我们计算关键点的交集:

    //assume
    $second_array = array(311, 99);
    
    $result = array_intersect_key($first, array_flip($second_array));
    

    它给出:

    Array
    (
        [311] => Array
            (
                [name] => Tester
                [id] => 311
            )
    
    )
    

    所以它不是您想要的,但是您可以通过 $element->name