我试图根据我在数组中搜索的值获取密钥索引。我有下面的数组:
[0] => Array
(
[n1:ProductWithTermPricingOptions] => Array
(
[n1:ProductName] => Customer will provide modem
[n1:PricingOptions] => Array
(
[n1:Priority] => 600
[n1:PricingOptionCode] => LCTL_SA_MDM_NONE_LCTL:NONE:MODEM:IN:CON:SA:na:na:NONE:NONE:-1:-1:NONE:LCTL:NONE:0:na:NONE:A:PO:na:0:NULL:NULL:NULL
[n1:ProductMonthlyCharge] => $0.00
[n1:PromoMonthlyCharge] => $0.00
[n1:ProductActivationCharge] => $0.00
[n1:ProductActivationChargeDescription] => Array
(
)
[n1:ContractLength] => Array
(
)
(
)
(
)
[n1:ProductDisclaimer] => Array
(
)
)
)
我需要获取“客户将提供调制解调器”值所在的密钥编号,在这种情况下,它应该返回密钥的编号0。在其他情况下,它将返回不同的位置。我尝试了以下但它返回值为的键而不是[0]:
public static function searchArrayKeybyValue(array $array, $search) {
foreach ( new RecursiveIteratorIterator ( new RecursiveArrayIterator ( $array ) ) as $key => $value ) {
if ($search === $value)
return $key;
}
return "N/A";
}
感谢任何帮助。我的目标是将此选项放在数组的最后位置。 谢谢。
答案 0 :(得分:2)
function array_finder($array, $search, $parent_key = false)
{
foreach ($array as $local_key => $value) {
$key = ($parent_key === false) ? $local_key : $parent_key;
if (is_array($value) and ($subsearch = array_finder($value, $search, $key)) !== false) {
return $subsearch;
} elseif ($value == $search) {
return $key;
}
}
return false;
}
echo array_finder($array, 'Customer will provide modem');
答案 1 :(得分:0)
您将返回内部密钥,而不是最外层密钥。对外部数组使用普通foreach
,对内容使用递归迭代器。
foreach ($array as $key => $subarray) {
foreach (new RecursiveIterator($subarray) as $value) {
if ($value === $search) {
return $key;
}
}
}
答案 2 :(得分:0)
如果将数组转换为DOMDocument对象,则子元素实际上可以看到它们的父元素,并且您可以随意遍历或修改它。然后将其转换回来。 (我知道那些转换说起来容易做起来难,所以如果这个解决方案对你来说听起来很合适,请告诉我,我会用一些可以处理它的辅助函数来编辑它。)