我在php中有一个多维关联数组:
$myArray = array(
'a' => array('foo'=>'one', 'bar'=>'two'),
'b' => array('foo'=>'three', 'bar'=>'four'),
'c' => array('foo'=>'five', 'bar'=>'six')
);
二级数组的值('一个'两个'三个'等等)都是不同的。
我想通过它们找到符合我条件的那个(例如哪一个等于'三个'),一旦找到,就制作对应的第一级密钥(在这种情况下) ''来自'''' c')作为$ myArray的第一个元素;同时保持其他元素的原始顺序。
此外,出于性能原因,我希望一旦这些密钥满足条件,代码就会突破循环。
所以生成的数组应该是:
myArray (
[b] => (
'foo'=>'three',
'bar'=>'four'
)
[a] => (
'foo'=>'one',
'bar'=>'two'
)
[c] => (
'foo'=>'five',
'bar'=>'six'
)
)
我可以使用uasort实现这一点,但我有一个非常大的数组,因此我正在寻找最有效的方法。
有什么想法吗?
答案 0 :(得分:1)
循环遍历数组,直到找到目标值。正如你所说的那样,在找到它之后就会突破循环。
$target = 'three';
foreach ($myArray as $key => $value) {
if ($found = $value['foo'] == $target) break;
}
之后,如果找到了,您可以使用array_merge
将值移到开头。 ($key
和$value
仍将设置为您在循环中退出时的值。)
if ($found) {
$myArray = array_merge([$key => $value], $myArray);
}