【问题标题】:I want to reverse array without any php function?我想在没有任何 php 函数的情况下反转数组?
【发布时间】:2017-09-27 08:38:53
【问题描述】:

我尝试过类似的方法,但它给了我价值。我需要再次将数组中的所有元素反转。

 <?php
//There is an array 
  echo '<pre>';
  $arr = ['a','b','c','d','e','f'];
  print_r($arr);
  $size = sizeof($arr);
 //print_r($size);

 for($i=5; $i<=$size; $i--)
 {
  echo $arr[$i];
 }

?>

但它给了我输出“fedcba” 我需要这样["f", "e", "d", "c", "b", "a"] 在不使用任何 PHP 数组函数和任何其他新变量的情况下反转其所有元素。

【问题讨论】:

  • 你的函数返回什么
  • 首先从数组中弹出元素。然后再次以反向格式将单个元素推送到数组
  • 是否需要反转数组,或者可以接受一个新的反转数组吗?
  • 我需要反转数组
  • 如果不覆盖当前值,您将无法做到这一点。您将需要一个临时数组(或字符串)来保存值

标签: php arrays


【解决方案1】:

扩展 Hanky Panky 的回答如果您不需要任何其他元素,则可以取消设置数组的先前值。

    <?php
    $arr = ['a','b','c','d','e','f'];

    for($i=count($arr)-1;$i>=0;$i--){
    $arr[]=$arr[$i];
    unset($arr[$i]);
    }
    print_r($arr);
   //Additionaly you can use array_values to reindex your array from 0
    print_r(array_values($arr));
    ?>

小提琴是Check here

【讨论】:

  • $arr[]=$arr[$i]; 在这一行是$arr 新的空白数组(新对象)?
  • 它没有创建新对象它正在为您以前的数组分配值。 $arr 不是一个新对象和空白数组它是你以前数组的延续
【解决方案2】:

//使用这个

$arr = ['a','b','c','d','e','f'];

$size = sizeof($arr);
    $res=array();
  for($i=$size-1; $i>=0; $i--){
       $res[]= $arr[$i];
  }

print_r($res);

【讨论】:

  • 谢谢,但我不需要任何新变量或任何新数组来存储前一个变量。
【解决方案3】:

这使用与您的代码相同数量的变量,即 $arr、$size 和 $i。

$arr = ['a','b','c','d','e','f'];

$size = count($arr);
for($i=$size-1;$i>=0;$i--){
    $arr[$size] = $arr[$i];
    unset($arr[$i]);
    $size++;
}

var_dump($arr);

https://3v4l.org/mEHJU

它创建:

array(6) {
      [6]=>
      string(1) "f"
      [7]=>
      string(1) "e"
      [8]=>
      string(1) "d"
      [9]=>
      string(1) "c"
      [10]=>
      string(1) "b"
      [11]=>
      string(1) "a"
}

键不是从 0 开始的,但是可以用 array_values 更正,还是不需要那个函数来更正?

【讨论】:

    【解决方案4】:

    在你的for循环中,你有$i=0吗?其次,您可以在没有任何额外功能的情况下反转数组,但由于您使用的是 $size 变量,我希望您可以使用另一个变量 $temp 进行交换。这是示例代码:

    //original array
    $arr = ['a','b','c','d','e','f'];
    print_r($arr);
    $size = sizeof($arr);
    
    for($i=0; $i<$size; $i++)
    {
         $temp=$arr[$i];
         $arr[$i]=$arr[$size-1];
         $arr[$size-1]=$temp;
         $size--;
    
    }
    //reversed array
    print_r ($arr);
    

    【讨论】:

    • 添加了另一个使用交换方法的答案,既不使用额外功能也不使用任何新变量。
    【解决方案5】:

    这是另一种解决方案,使用与您相同的变量名称并使用交换方法,(在这里您也可以假设 $i 作为左侧的索引,$size 作为右侧的索引。

    $arr = ['a','b','c','d','e','f'];
    print_r($arr);
    $i=0;
    
    while ($i < sizeof($arr)/2){
        $size=$arr[$i];
        $arr[$i]=$arr[sizeof($arr)-1-$i];
        $arr[sizeof($arr)-1-$i]=$size;  
        $i=$i+1;
    }
    
    //reversed array
    print_r ($arr);
    

    【讨论】:

      【解决方案6】:
            <?php
         $arr = ['a','b','c','d','e','f'];
         print_r($arr);
         $size = sizeof($arr);
        for($i=5; $i<=$size; $i--)
        {
          if($i==$size-1)
           {
           echo '['.'"'.$arr[$i].'"',',';
           }
          if($i<$size && $i!=5 && $i>0)
           {
          echo '"'.$arr[$i].'"'.','; 
           }
          if($i==0)
           {
          echo '"'.$arr[$i].'"'.']'; 
           }
       }
        ?>//hope this helps you....
      

      【讨论】:

        【解决方案7】:

        好的,这是我最后一次尝试

        $array = ['a','b','c','d','e','f'];
        $count = count($array);
        for($i = 0; $i < $count/2; $i++){
          $array[$i] ^= $array[$count-$i-1] ^= $array[$i] ^= $array[$count-$i-1];
        }
        

        它基于Is there a PHP function for swapping the values of two variables?

        如果你甚至不能使用count(),你可以做简单的foreach循环

        $count = 0;
        foreach($array as $one)
         $count++;
        

        【讨论】:

        • "不使用任何 PHP 函数和任何其他变量"
        猜你喜欢
        • 1970-01-01
        • 2015-07-09
        • 2017-09-20
        • 2019-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        相关资源
        最近更新 更多