PHP多维数组搜索数组

时间:2017-08-10 13:21:38

标签: php arrays search multidimensional-array key

我有一个多维数组:

$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';
}

3 个答案:

答案 0 :(得分:0)

我认为你需要的是这个

$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';
}  

现在你需要或运算符而不是和运算符,因为你想要存在typeid = 1或者存在构建id = 17。

如果我正确地理解了你的问题,那么你正试图做这样的事情,对吗?

希望这有帮助!

答案 1 :(得分:0)

$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
    }
}

答案 2 :(得分:0)

你需要做一个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

您可以在线查看此代码段here