【发布时间】:2015-04-01 01:23:19
【问题描述】:
我有一个混合数据类型(数组、整数、字符串)的 php 数组。我想在数组中搜索包含在混合数据类型数组中的匹配项,如下所示。
我的测试数组
$arrActors =[0 => [
'actorName' => "heath ledger",
'actorAlias' => [],
'actorGender' => 1,
'actorNoms' => ["angel", "john constantine"]
],
1 => [
'actorName' => "Michael pare",
'actorAlias' => ["mikey", "that guy"],
'actorGender' => 1,
'actorNoms' => ["cyclops", "slim", "eric the red"]
]
];
如果将 needle 设置为一个元素并且发现该元素存在于 actorNoms 中,我想回显关联的 actor 的名称 (actorName)。在下面的示例中,我试图找到 cyclops (actorNoms) 返回与他相关联的演员 Michael Pare (actorName) 的姓名。
我尝试查找 actorNoms 并返回演员姓名
$needle = 'cyclops';
foreach($arrActors as $haystack)
{
if(in_array($needle, $haystack)) {
echo $haystack['actorNoms'] . '<br />' ;
}else{
echo 'nothing found<br />';//echo something so i know it ran
}
}
我的尝试返回失败,因为它回显了“未找到任何内容”。在搜索独眼巨人时,如何回显演员 Michael Pare 的名字。
感谢您提供的任何帮助。我试图正确格式化我的代码以便于使用。我已经搜索了 Stack、Google 和其他资源几个小时,试图找到一个我能理解的解决方案。我不是很熟练,但我保证我正在学习并且感谢所有帮助。
【问题讨论】:
-
in_array()只搜索顶层,它不会像现在这样做你想要的。您需要运行一个循环 (foreach/for)。 (因为actorNoms是一个数组)。尝试将其更改为if(in_array($needle, $haystack['actorNoms'])) { .... -
如果您只是要在
actorNoms中搜索,那么只需明确地将其指向in_array中的那个,然后回显演员名称。 -
感谢您的建议 - 在大多数情况下,我实际上会明确搜索(这意味着我会搜索“actorName”,因此专门称之为是吗?)。但我想了解如何做更多事情才能成长。
标签: php search multidimensional-array echo