PHP多维数组搜索数组中的值组合

PHP多维数组搜索数组中的值组合,php,arrays,search,multidimensional-array,key,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 [zone

我有一个多维数组:

$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,也会给出一个误报。我怎样才能解决这个问题

编辑

我还想知道如果数组中没有组合,我如何安排

您可以尝试以下代码:

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

我想您需要的是这个

$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

如果我正确理解了你的问题,那么你是在尝试这样做,对吗


希望这有帮助

您需要执行foreach循环来获取实际的数组编号,另一种解决方案似乎无法满足您的要求,即获取索引编号

$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
    }
}
我想搜索,例如,[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>';
    }
}

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

如果我想知道typeId=17和buildingId=1的组合不存在,我将如何做?@Loesviser如果未找到任何结果,$result在foreach之后计算为false。
$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