PHP搜索具有多个值的多维数组

时间:2018-02-06 00:58:39

标签: php arrays multidimensional-array

我无法理解如何搜索具有多个值的多维关联数组 - 我已经看到了如何完成此操作的多个示例,但它们似乎都不适合我的确切场景。

我有一个这样的数组:

$locations = array(

ABC => array("loc1","loc2"),
DEF => array("loc2","loc3")

)

请注意' loc2'在两个嵌套数组中。

我需要能够使用我的应用程序从API生成的另一个数组的值来搜索数组,以获得与每个嵌套数组的键和值相匹配的值,如下所示: / p>

Array ( 
[0] => Array ( 
[callnumber] => Test 8 
[shelvinglocation] => loc1 
[availability] => 1 
[branch] => ABC 
) 
)

从这个数组中,如果在$ locations数组中找到了分支(ABC)和shelvinglocation(loc1),那么我想输出true。

到目前为止,这是我的代码:

$instLine = "ABC";
$loc = "loc3";

if (array_key_exists($instLine, $locations)) {
  foreach ($locations as $key => $value) {
    if (in_array($loc, $value)) {
      echo "match found";
    } else {
      echo "no match";
    }  
} 

此输出是"匹配找到",因为它没有将数组键与位置列表特别匹配,它只搜索所有位置。输出应该是"不匹配"因为loc3位于DEF数组中,而不是ABC数组。

如何重写这个,以便对于每个给定的$ instLine / $ loc组合,$ loc只在匹配$ instline值的数组中查找?

我感到愚蠢,因为我确信答案很简单,而且在文档中,我只是使用错误的术语来搜索示例。我很感激任何指点,即使这里有你需要的文档,虚拟'。 :)

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以做的是存储与$ instline值匹配的数组,然后单独搜索:

if (array_key_exists($instLine, $locations)) {
    $arr = $locations[$instLine];
    if (in_array($loc, $arr)) {
        echo "match found";
    } else {
        echo "no match";
   } 
} 

答案 1 :(得分:0)

$found=false;

foreach ($locations as $key => $value){
    if($key == $instLine){
        foreach($value as $k=>$v){
            if($v == $loc){
                $found=true;
            }
        }
    }
}

if($found == true){
    echo "match found";
} else {
    echo "no match";
}

您应该迭代两个数组并设置一个布尔值以确定该值是否存在。您的代码正在按预期工作,因为您只是检查$ loc的值是否存在于数组中的某个数组中(它确实存在)。还需要对匹配密钥进行条件检查