【问题标题】:reverse first array element with last将第一个数组元素与最后一个反转
【发布时间】:2020-01-25 16:11:50
【问题描述】:

我正在尝试用最后一个元素反转函数参数中给出的数组的第一个元素。

到目前为止,这是我的尝试:

$my_array = [0, 1, 2, 3, 4];


function  reverse_start_with_last(array &$arr)
{
    $arr[0] = end($arr);

    $last = end($arr);

    $last = reset($arr);

    print_r($arr);

    static $callingnumber = 0;
    $callingnumber++;

    echo '<br><br>' .     $callingnumber;
}

reverse_start_with_last($my_array);

它输出:

数组([0] => 4 [1] => 1 [2] => 2 [3] => 3 [4] => 4)。

所以你可以看到 0 与 4 反转,但 4 不与 0 反转.. 提前致谢!

【问题讨论】:

    标签: php arrays element


    【解决方案1】:

    有几种方法可以做到这一点,问题是您的代码在存储开始之前覆盖它并尝试移动它。此代码获取该值,然后覆盖它,然后更新最后一项...

    function  reverse_start_with_last(array &$arr)
    {
        $first = $arr[0];
        $arr[0] = end($arr);
        $arr[count($arr)-1] = $first;
        print_r($arr);
    }
    
    reverse_start_with_last($my_array);
    

    这假定一个数字索引数组,而不是任何其他形式的索引。

    【讨论】:

      【解决方案2】:

      此函数将第一个元素与数组的最后一个元素交换。

      function  array_change_first_last(array &$arr)
      {
          $last = end($arr);
          $arr[key($arr)] = reset($arr);
          $arr[key($arr)] = $last;
      }
      
      $my_array = [0, 1, 2, 3, 4];
      array_change_first_last($my_array);
      

      此函数适用于数值和关联数组。密钥保留,只交换值。

      $ass_array = ['a' => 0, 'b' => 1, 'c' => 2, 'd' => 3, 'z'=> 4];
      array_change_first_last($ass_array);
      

      结果:

      array(5) { ["a"]=> int(4) ["b"]=> int(1) ["c"]=> int(2) ["d"]=> int(3) ["z"]=> int(0) }
      

      【讨论】:

      • 这可能有效,但需要进一步解释数组内部指针(和编译器排序)-我认为您应该在答案中添加该解释,以便 OP 了解它为什么有效
      【解决方案3】:

      您可以移动第一个元素并弹出最后一个并存储它们,然后取消移动最后一个并推送第一个

      $my_array = [0, 1, 2, 3, 4];
      
      function  reverse_start_with_last(array &$arr)
      {
          $first = array_shift($arr); // remove the first element and store it
          $last = array_pop($arr); // remove the last and store it
          array_unshift($arr, $last); // add the last at the beginning of the array
          array_push($arr, $first); // add the first at the end of the array
      }
      
      
      reverse_start_with_last($my_array);
      print_r($my_array)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-27
        • 1970-01-01
        • 1970-01-01
        • 2015-04-18
        • 2021-04-03
        • 2022-11-16
        • 2021-03-14
        相关资源
        最近更新 更多