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

Php 如果数组的元素满足条件,则将其作为第一个元素,php,arrays,sorting,conditional-statements,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') ); 第二级数组(“一”、“二”、“三”等)的值都不同 我想遍历它们,找到符合我条件的一个(例如,哪个等

我在php中有一个多维关联数组:

$myArray = array(
  'a' => array('foo'=>'one', 'bar'=>'two'),
  'b' => array('foo'=>'three', 'bar'=>'four'),
  'c' => array('foo'=>'five', 'bar'=>'six')
);
第二级数组(“一”、“二”、“三”等)的值都不同

我想遍历它们,找到符合我条件的一个(例如,哪个等于“三”),一旦找到,将相应的第一级键(在这种情况下,是“a”、“b”、“c”中的“b”)作为$myArray的第一个元素;同时保持其他元素的原始顺序

此外,出于性能方面的原因,我希望一旦这些键中的一个满足条件,代码就能够跳出循环

因此,生成的数组应该是:

myArray (
 [b] => (
  'foo'=>'three',
  'bar'=>'four'
 )
 [a] => (
  'foo'=>'one',
  'bar'=>'two'
 )
 [c] => (
  'foo'=>'five',
  'bar'=>'six'
 )
)
我可能可以使用uasort实现这一点,但我有一个非常大的数组,因此我正在寻找最有效的方法


有什么想法吗?

在数组中循环,直到找到目标值。正如你所说的,在找到它之后,打破循环

$target = 'three';

foreach ($myArray as $key => $value) {
    if ($found = $value['foo'] == $target) break;
}
之后,如果已找到该值,则可以使用
array\u merge
将该值移到开头。(
$key
$value
仍将设置为跳出循环时的值。)


就是这样。我曾考虑过一种不那么优雅的方法,即使用array_splice()删除元素,然后使用array_merge()将其添加到顶部。非常感谢。顺便说一句,我将在$myArray上进行另一次foreach迭代;我需要重置它还是数组合并它?如果找到了目标并且
array\u merge
确实发生了,它实际上将是一个新数组。但无论哪种方式,您都不需要在另一个
foreach
循环之前重置它。这将自动发生。再次感谢你,你帮了我很大的忙。干杯
if ($found) {
    $myArray = array_merge([$key => $value], $myArray);
}