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