【问题标题】:Check Arrays with different keys?检查具有不同键的数组?
【发布时间】:2010-07-05 08:51:46
【问题描述】:

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

1.数组看起来像这样。

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

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

2。数组长这样

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

现在我需要比较它们并获取它们的 ID。

我正在寻找的是类似的东西

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

我该怎么做?

【问题讨论】:

  • 它只是一个普通数组,还是您也尝试在数组中的对象中搜索?

标签: php arrays compare


【解决方案1】:

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】:

    我会像移除外键一样转换数组 1(至少是暂时的),然后在遍历数组 2 时,我会用 array_key_exists 与转换后的数组 1 进行比较。

    【讨论】:

      【解决方案3】:

      我希望我能理解您的问题,可能存在语言障碍,但我们开始吧:

      所以基本上你有 3 个数组,你想用最后一个来检查第一个,看看这些值/键是否存在于第一个中?那么你要做的第一件事就是将你的第一个数组重新构造成可以轻松翻译的东西,以检查接下来两个数组的值和键。所以让我们调用第一个数组 $mapArray:

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

      现在这应该给我们类似的东西:

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

      现在让我们调用第二个数组 $arrayIds 和第三个 $arrayNames。要查看 am id 是否存在并在给定数组 $arrayIds 时获取其名称,您需要做的就是:

      //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】:

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

        $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 轻松访问 name 属性。

        【讨论】:

          猜你喜欢
          • 2021-12-10
          • 1970-01-01
          • 2019-07-12
          • 1970-01-01
          • 1970-01-01
          • 2013-11-26
          • 1970-01-01
          • 2016-06-09
          • 1970-01-01
          相关资源
          最近更新 更多