【问题标题】:PHP Multidimensional array searching for combinations of values in arrayPHP多维数组搜索数组中的值组合
【发布时间】:2017-08-10 13:21:37
【问题描述】:

我有一个多维数组:

$array =
  Array ( 
  [0] => Array ( [id] => 2 [zoneId] => 2 [buildingId] => 2 [typeId] => 2 ) 
  [1] => Array ( [id] => 4 [zoneId] => 2 [buildingId] => 2 [typeId] => 1 ) 
  [2] => Array ( [id] => 6 [zoneId] => 6 [buildingId] => 17 [typeId] => 2 ) )

我想搜索,例如,[buildingId] => 2, [typeId] => 2 的组合是否存在是数组 0、1​​ 或 2。

我尝试了以下方法:

$keyType = array_search(2, array_column($array, 'typeId'));
$keyBuilding = array_search(2, array_column($array, 'buildingId'));

if(is_numeric($keyType)&&is_numeric($keyBuilding)){
     echo 'Combination does exists'
}

这可行,但如果我搜索 [buildingId] => 17, [typeId] => 1,也会出现误报。我该如何解决这个问题?

编辑

我也想知道一个组合是否不在数组中,我该如何安排呢?

if($result == false){
echo 'does not exists';
}

【问题讨论】:

    标签: php arrays search multidimensional-array key


    【解决方案1】:

    你可以试试这个代码:

    $keyTypeExistsAndHaveSameValue = isset($array['typeId']) && $array['typeId'] === 2;
    $keyBuildingExistsAndHaveSameValue = isset($array['buildingId']) && $array['buildingId'] === 2;
    
    if($keyTypeExistsAndHaveSameValue && $keyBuildingExistsAndHaveSameValue){
         echo 'Combination does exists'
    }
    

    此代码检查 typeId 和 buildingId 键是否存在,但它也检查其值是否为 2 和 2。

    【讨论】:

      【解决方案2】:
      $buildingId = 2;
      $typeId = 2;
      $result = false;
      foreach ($array as $key => $val) {
          if ($val['buildingId'] == $buildingId && $val['typeId'] == $typeId) {
              $result = $key; // If you want the key in the array
              $result = $val; // If you want directly the entry you're looking for
              break; // So that you don't iterate through the whole array while you already have your reuslt
          }
      }
      

      【讨论】:

      • 如果我想知道 typeId = 17 和 buildingId = 1 的组合不存在,我该怎么做?
      • @LoesVisser 如果没有找到 rsult,$resultforeach 之后计算为 false
      【解决方案3】:

      我想你需要的是这个

      $keyType = array_search(1, array_column($array, 'typeId'));
      $keyBuilding = array_search(17, array_column($array, 'buildingId'));
      
      if(is_numeric($keyType)||is_numeric($keyBuilding)){
        echo 'Combination does exists';
      }  
      

      现在您需要 or 运算符而不是 and 运算符,因为您希望 typeid = 1 存在或 building id = 17 存在。

      如果我正确理解了您的问题,那么您正在尝试做这样的事情,对吧?

      希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        您需要执行一个 foreach 循环来获取实际的数组编号,另一种解决方案似乎无法回答您要查找的内容,即获取索引号。

        我想搜索例如 [buildingId] => 2, [typeId] => 2 的组合是否存在是数组 0、1​​ 或 2。

        编辑:此代码只是显示如何获取数组索引号的示例代码,在生产环境中您将保存匹配的数组,比较数字不是硬编码等...

        $array = array(array('id' => 2, 'zoneId' => 2, 'buildingId' => 2, 'typeId' => 2),
                    array('id' => 4, 'zoneId' => 2, 'buildingId' => 2, 'typeId' => 2),
                    array('id' => 6, 'zoneId' => 6, 'buildingId' => 17, 'typeId' => 2));
        
        
        foreach ($array as $building => $building_details)
        {
            if ($building_details['buildingId'] === 2 && $building_details['typeId'] === 2)
            {
                echo 'Array number ' . $building . ' matches criteria<br>';
            }
        }
        

        输出:

        Array number 0 matches criteria
        Array number 1 matches criteria
        

        你可以在线查看这个sn-p here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-03
          • 2011-05-20
          • 2017-07-23
          • 2014-06-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多