使用PHP搜索multidimensioanl数组时搜索正确的密钥
问题描述:
我一直试图让这个工作在过去的一天,没有运气。最后,我做了一个糟糕的黑客攻击,并希望如何做到这一点。使用PHP搜索multidimensioanl数组时搜索正确的密钥
我需要找到具有下列结构
(
[2] => Array
(
[0] => Array
(
[total] => 52
[date] => 2017-02-08
[nickname] => AAAA
)
[1] => Array
(
[total] => 53
[date] => 2017-02-09
[nickname] => AAAA
)
)
[3] => Array
(
[8] => Array
(
[total] => 11
[date] => 2017-02-08
[nickname] => XXXX
)
[9] => Array
(
[total] => 14
[date] => 2017-02-09
[nickname] => XXXX
)
)
)
我需要日期为阵列内部的每个阵列搜索阵列中的搜索键时,我使用下面的代码
$key = array_search($value, array_column($sales, 'date'));
其中的一个foreach
循环大阵。
问题我的是$key
而不是返回我的id它似乎是返回我的位置。因此,例如用于$value = '2017-02-09'
后总是回到我1
而不是1
和9
难道只是我不明白array_seach工作或者有没有什么办法,我可以得到1
和9
AS内部的搜索结果所述foreach
在正确的方向的任何尖端将理解的,
答
可以使用一个嵌套循环所有的日期值相匹配的数组的按键附加。
foreach ($your_array as $set) {
foreach ($set as $key => $item) {
if ($item['date'] == $value) $keys[] = $key;
}
}
对于您的示例数组,这将导致$keys = [1, 9]
。
答
array_search - 搜索数组给定值,并返回使用The RecursiveIteratorIterator class的 第一对应的按键如果成功
解决办法:
$keys = [];
$value = '2017-02-09';
$it = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($data), \RecursiveIteratorIterator::SELF_FIRST);
foreach ($it as $k => $v) {
if (is_array($v) && isset($v['date']) && $v['date'] == $value) {
$keys[] = $k;
}
}
+0
它返回冷杉t相应的键,但我在foreach中调用它,所以我期望分别为1和9,但我总是得到1和1。 – JordanBelf
我想,你的示例'$ key'应该是一个数组,因为有两个具有相同值的日期'2017-02-09' – RomanPerekhrest