搜索混合数据类型的多维数组,回显结果
search multidimensional array with mixed data types, echo back result
我有一个包含混合数据类型(数组、整数、字符串)的 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"]
]
];
如果针被设置为一个元素,并且发现该元素存在于 actorNoms 中,我想回显相关演员的名字 (actorName)。在下面的示例中,我试图找到 cyclops (actorNoms) return 演员的名字,Michael Pare (actorName) 与他有关联。
我试图找到 actorNoms 和 return 演员姓名
$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
}
}
我的尝试 returns 失败了,因为它回显了 'nothing found'。在搜索独眼巨人时,如何回显演员 Michael Pare 的名字。
感谢您提供的任何帮助。我已尝试正确格式化我的代码以便于使用。我已经搜索 Stack、Google 和其他资源几个小时,现在试图找到一个我能理解的解决方案。我不是很熟练,但我保证我正在学习,感谢所有帮助。
而不是使用
if(in_array($needle, $haystack)) {
echo $haystack['actorNoms'] . '<br />' ;
}
试试这个:
if(in_array($needle, $haystack['actorNoms'])) {
echo $haystack['actorName'] . '<br />' ;
}
您所做的是搜索 $haystack
,这是演员的主要数组。
in_array
不会为多维数组自动搜索嵌套数组,因此您需要指定要搜索的区域:in_array($haystack['actorNoms'])
$needle = 'cyclops';
foreach($arrActors as $haystack)
{
if(in_array($needle, $haystack['actorNoms'])) {
echo $haystack['actorName'] . '<br />' ;
}
}
in_array,仅适用于一级阵列。所以每次它经过一级数组时,其中 'actorNoms' 是一级数组下的子数组。
试试这个给你父索引使用这个索引你会得到数据
$arrActors = array( array(
'actorName' => "heath ledger",
'actorAlias' => array(),
'actorGender' => 1,
'actorNoms' => array("angel", "john constantine")
),array(
'actorName' => "Michael pare",
'actorAlias' => array("mikey", "that guy"),
'actorGender' => 1,
'actorNoms' => array("cyclops", "slim", "eric the red")
)
);
print_r( getParent_id("cyclops",$arrActors));
function getParent_id($child, $stack) {
foreach ($stack as $k => $v) {
if (is_array($v)) {
// If the current element of the array is an array, recurse it and capture the return
$return = getParent_id($child, $v);
// If the return is an array, stack it and return it
if (is_array($return)) {
return array($k => $return);
}
} else {
// Since we are not on an array, compare directly
if (preg_match("/$child/",$v)) {
// And if we match, stack it and return it
return array($k => $child);
}
}
}
// Return false since there was nothing found
return false;
}
我有一个包含混合数据类型(数组、整数、字符串)的 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"]
]
];
如果针被设置为一个元素,并且发现该元素存在于 actorNoms 中,我想回显相关演员的名字 (actorName)。在下面的示例中,我试图找到 cyclops (actorNoms) return 演员的名字,Michael Pare (actorName) 与他有关联。
我试图找到 actorNoms 和 return 演员姓名
$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
}
}
我的尝试 returns 失败了,因为它回显了 'nothing found'。在搜索独眼巨人时,如何回显演员 Michael Pare 的名字。
感谢您提供的任何帮助。我已尝试正确格式化我的代码以便于使用。我已经搜索 Stack、Google 和其他资源几个小时,现在试图找到一个我能理解的解决方案。我不是很熟练,但我保证我正在学习,感谢所有帮助。
而不是使用
if(in_array($needle, $haystack)) {
echo $haystack['actorNoms'] . '<br />' ;
}
试试这个:
if(in_array($needle, $haystack['actorNoms'])) {
echo $haystack['actorName'] . '<br />' ;
}
您所做的是搜索 $haystack
,这是演员的主要数组。
in_array
不会为多维数组自动搜索嵌套数组,因此您需要指定要搜索的区域:in_array($haystack['actorNoms'])
$needle = 'cyclops';
foreach($arrActors as $haystack)
{
if(in_array($needle, $haystack['actorNoms'])) {
echo $haystack['actorName'] . '<br />' ;
}
}
in_array,仅适用于一级阵列。所以每次它经过一级数组时,其中 'actorNoms' 是一级数组下的子数组。
试试这个给你父索引使用这个索引你会得到数据
$arrActors = array( array(
'actorName' => "heath ledger",
'actorAlias' => array(),
'actorGender' => 1,
'actorNoms' => array("angel", "john constantine")
),array(
'actorName' => "Michael pare",
'actorAlias' => array("mikey", "that guy"),
'actorGender' => 1,
'actorNoms' => array("cyclops", "slim", "eric the red")
)
);
print_r( getParent_id("cyclops",$arrActors));
function getParent_id($child, $stack) {
foreach ($stack as $k => $v) {
if (is_array($v)) {
// If the current element of the array is an array, recurse it and capture the return
$return = getParent_id($child, $v);
// If the return is an array, stack it and return it
if (is_array($return)) {
return array($k => $return);
}
} else {
// Since we are not on an array, compare directly
if (preg_match("/$child/",$v)) {
// And if we match, stack it and return it
return array($k => $child);
}
}
}
// Return false since there was nothing found
return false;
}