Php 使用特定值反转数组元素

Php 使用特定值反转数组元素,php,arrays,sorting,Php,Arrays,Sorting,我有一个这样的数组 $array = array( [0] => 'red1', [1] => 'blue1', [2] => 'red2', [3] => 'red3', [4] => 'blue2' ); A只想反转具有红色值的元素的顺序,使其看起来像这样: $array = array( [0] => 'red3', [1] => 'blue1', [2] => 'red2', [3] => 'red1', [4] => 'bl

我有一个这样的数组

$array = array( [0] => 'red1', [1] => 'blue1', [2] => 'red2', [3] => 'red3', [4] => 'blue2' );
A只想反转具有红色值的元素的顺序,使其看起来像这样:

$array = array( [0] => 'red3', [1] => 'blue1', [2] => 'red2', [3] => 'red1', [4] => 'blue2' );

您可以将red的引号捕获到一个新数组中并对其进行排序

<?php
$arr = array(
     'red1', 
     'blue1', 
     'red2', 
     'red3', 
     'blue2'
);

$sortArr = array();
for ($i=0; $i < sizeof($arr); $i++) { 
    if(strstr($arr[$i], "red")){
        $sortArr[] = &$arr[$i];
    }
}
?>

我认为您可以使用strpos搜索特定的单词,并使用ksort对数组进行排序根据关键字按升序排序关联数组

foreach ($array as $key => $value) {        
if(strpos($value,"red") !== false){
    ($key === 0) ? $index = 3 : (($key === 3) ? $index = 0 : $index = 2);
    $temp[$index] = $value;
}
else {
    $temp[$key] = $value;
}   
}
ksort($temp);
var_dump($temp);

[但它在比这更大的阵列中不起作用]

我认为可能的解决方案是:

从要查找的$array中获取所有值,然后 将它们存储在数组$found中 将$found中的值反转,保留键 将$array中的值替换为$find中的值,使用 钥匙 例如:

$array = array(0 => 'red1', 1 => 'blue1', 2 => 'red2', 3 => 'red3', 4 => 'blue2');

// First get all the values with 'red' and store them in an array
$found = preg_grep('/red\d+/', $array);

// Reverse the values, keeping the keys
$found = array_combine(
    array_keys($found),
    array_reverse(
        array_values($found)
    )
);

// Then replace the values of $array with values having the same keys in $found
$array = array_replace($array, $found);

var_dump($array);
将导致:

array(5) {
  [0]=>
  string(4) "red3"
  [1]=>
  string(5) "blue1"
  [2]=>
  string(4) "red2"
  [3]=>
  string(4) "red1"
  [4]=>
  string(5) "blue2"
}

如何仅反转红色元素而不接触任何其他元素