具有特定值的反向数组元素

时间:2016-03-24 19:07:06

标签: php arrays sorting

我有一个像这样的数组

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

想要仅使用红色值反转元素的顺序,使其如下所示:

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

3 个答案:

答案 0 :(得分:0)

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

  1. 获取您要查找的$array的所有值 将它们存储在数组$found
  2. 反转$found保留键
  3. 的值
  4. 使用$array中的值替换$found中的值 关键
  5. 例如:

    $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"
    }
    

答案 1 :(得分:-1)

您可以将红色引号添加到新数组并对其进行排序。

<?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];
    }
}
?>

答案 2 :(得分:-1)

我认为您可以使用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);

[但它不会在比这更大的阵列中工作]