How to change orders of array?

前端 未结 6 1994
悲&欢浪女
悲&欢浪女 2021-02-09 20:04
$a = array(0=>\'a\',1=>\'b\',2=>\'c\', 3=>\'d\');

I want to change the order to be 3,2,0,1

$a = array(3=>\         


        
相关标签:
6条回答
  • 2021-02-09 20:35
    function reorder_array(&$array, $new_order) {
      $inverted = array_flip($new_order);
      uksort($array, function($a, $b) use ($inverted) {
        return $inverted[$a] > $inverted[$b];
      });
    }
    
    $a = array(0=>'a',1=>'b',2=>'c', 3=>'d');
    reorder_array($a, array(3, 2, 0, 1));
    
    var_dump($a);
    

    Result:

    Array ( [3] => d [2] => c [0] => a [1] => b )
    
    0 讨论(0)
  • 2021-02-09 20:36

    A more general aproach:

    $ex_count = count($ex_names_rev_order);
    $j = 0;
    $ex_good_order = array();
    for ($i=($ex_count - 1); $i >= 0 ; $i--) { 
    
        $ex_good_order[$j] = $ex_names_rev_order[$i];
        $j++;
    }
    
    0 讨论(0)
  • 2021-02-09 20:43

    The easiest way to do it with uksort(), more functional way:

    $a = ['a','b','c','d'];
    $order = [3, 2, 0, 1];
    
    uksort($a, function($x, $y) use ($order) {
        return array_search($x, $order) > array_search($y, $order);
    });
    
    print_r($a); // [3 → d, 2 → c, 0 → a, 1 → b]
    
    0 讨论(0)
  • 2021-02-09 20:52

    Since arrays in PHP are actually ordered maps, I am unsure if the order of the items is preserved when enumerating.

    If you simply want to enumerate them in a specific order:

    $a = array(0=>'a',1=>'b',2=>'c', 3=>'d');
    $order = array(3, 2, 0, 1);
    
    foreach ($order as $index)
    {
      echo "$index => " . $a[$index] . "\n";
    }
    
    0 讨论(0)
  • 2021-02-09 20:52

    here is how

    krsort($a);
    
    0 讨论(0)
  • 2021-02-09 20:55

    If you want to change the order programmatically, have a look at the various array sorting functions in PHP, especially

    • uasort()— Sort an array with a user-defined comparison function and maintain index association
    • uksort()— Sort an array by keys using a user-defined comparison function
    • usort()— Sort an array by values using a user-defined comparison function

    Based on Yannicks example below, you could do it this way:

    $a = array(0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd');
    $b = array(3, 2, 0, 1); // rule indicating new key order
    $c = array();
    foreach($b as $index) {
        $c[$index] = $a[$index];
    }
    print_r($c);
    

    would give

    Array([3] => d [2] => c [0] => a [1] => b)
    

    But like I said in the comments, if you do not tell us the rule by which to order the array or be more specific about your need, we cannot help you beyond this.

    0 讨论(0)
提交回复
热议问题