为了账号安全,请及时绑定邮箱和手机立即绑定

交换多维数组中的第一个和最后一个数组

交换多维数组中的第一个和最后一个数组

PHP
慕后森 2021-10-22 16:58:20
我有以下格式的多维数组$pet = array(     array(            'name' => 'Chew Barka',            'breed' => 'Bichon',            'age'  => '2 years',            'weight' => 8,         'bio'   => 'The park, The pool or the Playground - I love to go anywhere! I am really great at... SQUIRREL!',            'filename' => 'pet1.png'    ),    array(            'name' => 'Spark Pug',            'breed' => 'Pug',            'age'  => '1.5 years',            'weight' => 11,            'bio'   => 'You want to go to the dog park in style? Then I am your pug!',            'filename' => 'pet2.png'    ),    array(        'name' => 'Pico de Gato',            'breed' => 'Bengal',            'age'  => '5 years',            'weight' => 9,            'bio'   => 'Oh hai, if you do not have a can of salmon I am not interested.',            'filename' => 'pet3.png'    ),    array(        'name' => 'Name',            'breed' => 'Breed',            'age'  => 'Age',            'weight' => 'Weight',            'bio'   => 'Biography',            'filename' => 'Filename'    ));我需要将最后一个数组与第一个数组交换。我试图这样做function arraySwap(&$array, $swap_a, $swap_b){    list($array[$swap_a], $array[$swap_b]) = array($array[$swap_b], $array[$swap_a]);}这确实将数组首先与最后交换。然而,我需要的是推动阵列波纹管。因此,一旦我将最后一个数组与第一个交换,第一个需要到达位置 1,位置 1 处的数组变为 2,等等。有人能指出我正确的方向吗?
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

您可以只从数组中切出第一个和最后一个项目,然后使用array_merge.


例子:


function swapFirstAndLast($array) {

    return array_merge(

        array_slice($array, -1 , 1), // Last item

        array_slice($array, 1 , count($array) - 2), // Second - Second last items

        array_slice($array, 0 , 1) // First item

    );

}


var_dump(array_column(swapFirstAndLast($pet), 'name'));


//array(4) {

//    [0] =>

//  string(4) "Name"

//    [1] =>

//  string(9) "Spark Pug"

//    [2] =>

//  string(12) "Pico de Gato"

//    [3] =>

//  string(10) "Chew Barka"

//}


查看完整回答
反对 回复 2021-10-22
?
阿晨1998

TA贡献2037条经验 获得超6个赞

有很多方法可以给这只猫剥皮。这里有两个函数,第一个总是交换第一个和最后一个元素,第二个交换任意元素。我已经展示了如何使用该函数轻松地交换第一个和最后一个。您可以在 arraySwapFirstLast 函数中使用来自 arraySwap 函数的逻辑,而不是array_shift、array_unshift和 array_pop,它可能会更有效,但这演示了一些重要的数组操作函数。arraySwap 中的简单逻辑是您将在教科书排序算法中使用的,并且非常高效。


<?php

$pet = array(

    array(

        'name' => 'Chew Barka',

        'breed' => 'Bichon',

        'age'  => '2 years',

        'weight' => 8,

        'bio'   => 'The park, The pool or the Playground - I love to go anywhere! I am really great at... SQUIRREL!',

        'filename' => 'pet1.png'

    ),

    array(

        'name' => 'Spark Pug',

        'breed' => 'Pug',

        'age'  => '1.5 years',

        'weight' => 11,

        'bio'   => 'You want to go to the dog park in style? Then I am your pug!',

        'filename' => 'pet2.png'

    ),

    array(

        'name' => 'Pico de Gato',

        'breed' => 'Bengal',

        'age'  => '5 years',

        'weight' => 9,

        'bio'   => 'Oh hai, if you do not have a can of salmon I am not interested.',

        'filename' => 'pet3.png'

    ),

    array(

        'name' => 'Name',

        'breed' => 'Breed',

        'age'  => 'Age',

        'weight' => 'Weight',

        'bio'   => 'Biography',

        'filename' => 'Filename'

    )

);


$pet1 = $pet;

$pet2 = $pet;


/**

 * Swap the first and last elements of an array

 * Uses shift/unshift and standard array append

 * @param $array

 */

function arraySwapFirstLast(&$array)

{

    $first = array_shift($array);

    $last  = array_pop($array);

    array_unshift($array, $last);

    $array[] = $first;

}


/**

 * Swap two arbitrary array elements

 * @param $array

 * @param $index1

 * @param $index2

 */

function arraySwap(&$array, $index1, $index2)

{

    $swapEl = $array[$index1];


    $array[$index1] = $array[$index2];

    $array[$index2] = $swapEl;

}


arraySwapFirstLast($pet);

echo 'arraySwapFirstLast:'.PHP_EOL;

print_r($pet).PHP_EOL;


arraySwap($pet1, 1, 2);

echo 'arraySwap second and third elements:'.PHP_EOL;

print_r($pet1).PHP_EOL;


arraySwap($pet2, 0, sizeof($pet2)-1);

echo 'arraySwap first and last elements:'.PHP_EOL;

print_r($pet2).PHP_EOL;


查看完整回答
反对 回复 2021-10-22
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

我想你只是有兴趣在顶部移动标题阵列,你可以做一些圆形阵列移动,如下所示


$arr = array(

     array(

            'name' => 'Chew Barka',

            'breed' => 'Bichon',

            'age'  => '2 years',

            'weight' => 8,

         'bio'   => 'The park, The pool or the Playground - I love to go anywhere! I am really great at... SQUIRREL!',

            'filename' => 'pet1.png'

    ),

    array(

            'name' => 'Spark Pug',

            'breed' => 'Pug',

            'age'  => '1.5 years',

            'weight' => 11,

            'bio'   => 'You want to go to the dog park in style? Then I am your pug!',

            'filename' => 'pet2.png'

    ),

    array(

        'name' => 'Pico de Gato',

            'breed' => 'Bengal',

            'age'  => '5 years',

            'weight' => 9,

            'bio'   => 'Oh hai, if you do not have a can of salmon I am not interested.',

            'filename' => 'pet3.png'

    ),

    array(

        'name' => 'Name',

            'breed' => 'Breed',

            'age'  => 'Age',

            'weight' => 'Weight',

            'bio'   => 'Biography',

            'filename' => 'Filename'

    )

);


echo "<pre>";

$key=count($arr)-1;

$output1 = array_slice($arr, $key); 

$output2 = array_slice($arr, 0,$key); 

$new=array_merge($output1,$output2);

print_r($new);

输出


Array

(

    [0] => Array

        (

            [name] => Name

            [breed] => Breed

            [age] => Age

            [weight] => Weight

            [bio] => Biography

            [filename] => Filename

        )


    [1] => Array

        (

            [name] => Chew Barka

            [breed] => Bichon

            [age] => 2 years

            [weight] => 8

            [bio] => The park, The pool or the Playground - I love to go anywhere! I am really great at... SQUIRREL!

            [filename] => pet1.png

        )


    [2] => Array

        (

            [name] => Spark Pug

            [breed] => Pug

            [age] => 1.5 years

            [weight] => 11

            [bio] => You want to go to the dog park in style? Then I am your pug!

            [filename] => pet2.png

        )


    [3] => Array

        (

            [name] => Pico de Gato

            [breed] => Bengal

            [age] => 5 years

            [weight] => 9

            [bio] => Oh hai, if you do not have a can of salmon I am not interested.

            [filename] => pet3.png

        )


)


查看完整回答
反对 回复 2021-10-22
  • 3 回答
  • 0 关注
  • 219 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信