【问题标题】:How to reverse an array in php WITHOUT using the array reverse method如何在不使用数组反转方法的情况下反转 php 中的数组
【发布时间】:2015-07-09 21:41:14
【问题描述】:

我想知道如何在不使用 array_reverse 方法的情况下反转数组。我有一个称为反向数组的数组,这是我想要反转的数组。我的代码如下。有人可以指出我做错了什么,因为我在其他任何地方都找不到以这种方式反转数组的任何示例。我的代码如下。

<?php

//Task 21 reverse array

$reverseArray = array(1, 2, 3, 4);
$tmpArray = array();
$arraySize = sizeof($reverseArray);

for($i<arraySize; $i=0; $i--){
    echo $reverseArray($i);
}

?>

【问题讨论】:

    标签: php arrays reverse


    【解决方案1】:
    <?php
      $array = array(1, 2, 3, 4);
      $size = sizeof($array);
    
      for($i=$size-1; $i>=0; $i--){
          echo $array[$i];
      }
    ?>
    

    【讨论】:

    • 如果我必须自己存储反向数组 $array 它怎么办?
    【解决方案2】:

    您的方法的问题是,当您达到 0 时,它会再次运行并且 index 获取 -1 的值。

    $reverseArray = array(1, 2, 3, 4);
    $arraySize = sizeof($reverseArray);
    
    for($i=$arraySize-1; $i>=0; $i--){
        echo $reverseArray[$i];
    }
    

    【讨论】:

      【解决方案3】:

      如何在不使用 php 中任何预定义函数的情况下反转数组。 我有一个解决这个问题的方法...... 这是我的解决方案........

      <?php
      // normal array --------
      $myarray = [1,2,3,4,5,6,7,8,9];
      //----------------
          $arr = [];
          for($i=9; $i > -1; $i--){
      
              if(!$i==0){
      
                  $arr[]= $i;
              }   
          }
          print_r($arr);
      
      
      
      //the out put is [9,8,7,6,5,4,3,2,1];
      ?>
      

      【讨论】:

        【解决方案4】:

        这是我从here 借用代码并更新它的另一种方式,这样我就不必使用 $temp 变量,而是利用数组解构,如下所示:

        <?php
        /* Function to reverse  
        $arr from start to end*/
        function reverseArray(&$arr, $start,  
                               $end) 
        { 
            while ($start < $end) 
            { 
                [$arr[$start],$arr[$end]] = [$arr[$end],$arr[$start]];
        
                $start++; 
                $end--; 
            }  
        }      
        
        $a = [1,2,3,4];
        reverseArray($a,0,count($a)-1);
        print_r($a);
        

        见live code

        这种技术的优点之一是数组 $a 被反转,因此没有必要创建新数组。

        以下改进了代码,因此不需要向 reverseArray() 传递多个参数;以及表示没有返回值:

        /* Function to reverse  
        $arr from start to end*/
        function reverseArray(&$arr, $start=0): void 
        { 
            $end = count($arr)-1;
            while ($start < $end) 
            { 
                [$arr[$start],$arr[$end]] = [$arr[$end],$arr[$start]];
        
                $start++; 
                $end--; 
            }  
        }      
        
        $a = [1,2,3,4];
        reverseArray($a);
        print_r($a);
        

        见here

        注意:此版本适用于 PHP 7.2-7.4.2

        【讨论】:

        • @Deadpool:如果您单击我提供的“实时代码”链接,您会注意到此代码在 PHP 7.1+ 中运行良好。鉴于 PHP 5.4.0 - 7.0.33 的低版本不支持数组解构功能,结果当然会产生解析错误,而不是 FATAL ERROR 消息。对于 PHP 5 和 PHP 4 的其他低级版本,该结果普遍适用。 – slevy1 11 分钟前删除
        【解决方案5】:

        下面是反转数组的代码,这里的目标是提供一个最优解。与上面批准的解决方案相比,我的解决方案只迭代了一半的时间。虽然是 O(n) 次。在处理大型数组时,它可以使解决方案更快一些。

        <?php
          $ar = [34, 54, 92, 453];
          $len=count($ar);
          for($i=0;$i<$len/2;$i++){
        
            $temp = $ar[$i];
            $ar[$i] = $ar[$len-$i-1];
            $ar[$len-$i-1] = $temp;
          }
        
          print_r($ar)
        
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-14
          • 1970-01-01
          • 1970-01-01
          • 2012-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多