【问题标题】:Reverse array in phpphp中的反向数组
【发布时间】:2012-04-05 12:07:00
【问题描述】:
array(7) {
  [0]=> array(2) { ["id"]=> string(1) "9"  ["roi"]=> float(0)    }
  [1]=> array(2) { ["id"]=> string(1) "1"  ["roi"]=> float(0)    }
  [2]=> array(2) { ["id"]=> string(2) "10" ["roi"]=> float(0)    }
  [3]=> array(2) { ["id"]=> string(2) "14" ["roi"]=> float(0)    }
  [4]=> array(2) { ["id"]=> string(1) "4"  ["roi"]=> float(0)    }
  [5]=> array(2) { ["id"]=> string(1) "5"  ["roi"]=> float(141)  }
  [6]=> array(2) { ["id"]=> string(1) "6"  ["roi"]=> float(2600) }
}

我只是想反转这个,所以 id 6(ROI 为 2600)在数组中排在第一位,等等。

我该怎么做? array_reverse()rsort() 在这种情况下不起作用

【问题讨论】:

  • 这些都不是正确答案?
  • 只是要把这个挂起来?如果没有帮助您,请发布您的解决方案并将其标记为已接受。

标签: php arrays


【解决方案1】:

http://php.net/manual/en/function.array-reverse.php:

$newArray = array_reverse($theArray, true);

重要的部分是true 参数,它保留了密钥。

不相信?您可以在 this codepad exampole 上看到它的实际效果。

【讨论】:

  • 因为他们想保持键的关联性?
  • @Kolink 所以??? array_reverse() 就是这样做的。我建议你阅读docs
  • 啊,确实如此,带有额外的preserve_keys 参数。我的错。
【解决方案2】:
foreach($array as $arr){

  array_unshift($array, $arr); 
  array_pop($array);

}

【讨论】:

    【解决方案3】:
    $res = array(
        0=>array("id"=>9, "roi"=>0),
        1=>array("id"=>1,"roi"=>0),
        2=>array("id"=>10,"roi"=>0),
        3=>array("id"=>14,"roi"=>0),
        4=>array("id"=>4,"roi"=>0),
        5=>array("id"=>5,"roi"=>141),
        6=>array("id"=>6,"roi"=>2600));
    
    $res4   =   array(); 
    $count  = count($res);
    
    for($i=$count-1;$i>=0;$i--){
        $res4[$i] =$res[$i]; 
    }
    
    print_r($res4);
    

    【讨论】:

      【解决方案4】:

      您可以像这样使用usort() 函数

      $arr = array('......'); // your array
      usort($arr, "my_reverse_array");
      
      function my_reverse_array($a, $b) {
          if($a['roi'] == $b['roi'])
          {
              return 0;
          }
          return ($a['roi'] < $b['roi']) ? -1 : 1;
      }
      

      这将确保具有最高 roi 的项在数组中排在第一位。

      【讨论】:

        【解决方案5】:
        $res = array(
            0=>array("id"=>9, "roi"=>0),
            1=>array("id"=>1,"roi"=>0),
            2=>array("id"=>10,"roi"=>0),
            3=>array("id"=>14,"roi"=>0),
            4=>array("id"=>4,"roi"=>0),
            5=>array("id"=>5,"roi"=>141),
            6=>array("id"=>6,"roi"=>2600));
            $count = count($res);
        
            for ($i=0, $j=$count-1; $i<=floor($count/2); $i++, $j--) {
                $temp = $res[$j];
                $res[$j] = $res[$i];
                $res[$i] = $temp;
            }
            echo '<pre>';
            print_r($res);
            echo '</pre>';
        

        【讨论】:

          【解决方案6】:

          这很容易。可以使用 php 的 usort 函数,如:

          usort($arr, function($a, $b) {    
            return $b['roi'] - $a['roi'];    
          });
          

          只需交换位置$a$b 即可。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-05-04
            • 2011-05-30
            • 1970-01-01
            • 2019-10-18
            • 2013-03-20
            • 1970-01-01
            • 1970-01-01
            • 2017-11-04
            相关资源
            最近更新 更多