如果数组元素满足条件,则将其作为第一个元素

时间:2017-01-24 22:51:57

标签: php arrays sorting conditional-statements

我在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实现这一点,但我有一个非常大的数组,因此我正在寻找最有效的方法。

有什么想法吗?

1 个答案:

答案 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);
}