2017-08-10 184 views
0

搜索值的组合我有一个多维数组:PHP多维阵列中阵列

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

回答

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 
    } 
} 
+0

非常感谢你:D这个作品! –

+0

如果我想知道组合typeId = 17和buildingId = 1不存在,我该怎么做? –

+0

@LoesVisser如果没有找到rsult,'foreach'后面的'$ result'评估为'false'。 – ksjohn

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

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

现在,您需要或运营商inste广告和运营商,因为您想要typeid = 1存在或建筑id = 17存在。

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

希望这会有所帮助!

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