我无法理解如何搜索具有多个值的多维关联数组 - 我已经看到了如何完成此操作的多个示例,但它们似乎都不适合我的确切场景。
我有一个这样的数组:
$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值的数组中查找?
我感到愚蠢,因为我确信答案很简单,而且在文档中,我只是使用错误的术语来搜索示例。我很感激任何指点,即使这里有你需要的文档,虚拟'。 :)
提前致谢!
答案 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的值是否存在于数组中的某个数组中(它确实存在)。还需要对匹配密钥进行条件检查