代码之家  ›  专栏  ›  技术社区  ›  Robert Sinclair

数组拼接“剪切粘贴”元素

php
  •  0
  • Robert Sinclair  · 技术社区  · 6 年前

    我有一个数组:

    Array
    (
        [0] => Array
            (
                [field_id] => 1
                [field_name] => NO_INSCRIPTION
                [order_number] => 0
            )
    
        [1] => Array
            (
                [field_id] => 2
                [field_name] => NO_ADDENDA
                [order_number] => 1
            )
    
        [2] => Array
            (
                [field_id] => 3
                [field_name] => CODE_LANGUE
                [order_number] => 2
            )
    
        [3] => ARRAY
            (
                [field_id] => 7
                [field_name] => TEXTE
                [order_number] => 3
            )
    )
    

    我想 移动 第四个元素到第二个位置

    Array
    (
        [0] => Array
            (
                [field_id] => 1
                [field_name] => NO_INSCRIPTION
                [order_number] => 0
            )
    
        [1] => ARRAY
            (
                [field_id] => 7
                [field_name] => TEXTE
                [order_number] => 3
            )
    
        [2] => Array
            (
                [field_id] => 2
                [field_name] => NO_ADDENDA
                [order_number] => 1
            )
    
        [3] => Array
            (
                [field_id] => 3
                [field_name] => CODE_LANGUE
                [order_number] => 2
            )
    
    )
    

    我试过了 array_splice 使用相同的函数

    array_splice($arr, 1, 0, $arr[3]);
    

    但是它返回了一些奇怪的东西而且它还保留了第三个元素的副本

    我知道这可以用 array_slice 但也许有一种更优雅、更易读的方式来实现这一点呢?希望有一个一行内置的PHP函数。

    4 回复  |  直到 6 年前
        1
  •  4
  •   Robert Sinclair    6 年前

    不要一行一行地这么做。将所需元件拼接出来,然后将其重新拼接到所需位置:

    $extracted = array_splice($arr, 3, 1);
    array_splice($arr, 1, 0, $extracted[0]);
    

    当生成的代码干净且易于理解时,一行程序是很好的,但是有一个类似于 array_splice() 当数组被修改到适当的位置时,结果可能很难让人理解。如果您真的想要一个一行程序,那么这就是函数的用途:

    function moveArrayElement(&$array, $from, $to) {
        $extracted = array_splice($array, $from, 1);
        array_splice($array, $to, 0, $extracted);
    }
    
    moveArrayElement($arr, 3, 1);
    
        2
  •  3
  •   Nick SamSmith1986    6 年前

    您可以将两个调用合并到 array_splice ,第一个提取要移动的值,第二个重新插入该值。这利用了一个事实 阵列拼接 就地修改数组并返回提取的值:

    $from = 3;
    $to = 1;
    array_splice($arr, $to, 0, array_splice($arr, $from, 1));
    

    输出:

    Array
    (
        [0] => Array
            (
                [field_id] => 1
                [field_name] => NO_INSCRIPTION
                [order_number] => 0
            )    
        [1] => Array
            (
                [field_id] => 7
                [field_name] => TEXTE
                [order_number] => 3
            )    
        [2] => Array
            (
                [field_id] => 2
                [field_name] => NO_ADDENDA
                [order_number] => 1
            )    
        [3] => Array
            (
                [field_id] => 3
                [field_name] => CODE_LANGUE
                [order_number] => 2
            )    
    )
    

    Demo on 3v4l.org

        3
  •  0
  •   gview    6 年前

    有许多不同的排序功能。在你的情况下你想看看 natcasesort()

    <?php
    $r = ['a', 'c', 'B', 'd'];
    
    natcasesort($r);
    
    print_r($r);
    

    输出

    Array
    (
        [0] => a
        [2] => B
        [1] => c
        [3] => d
    )
    
        4
  •  0
  •   Joseph    6 年前

    你可以用 array_sort 在这种情况下可能是最好的

    $base = [
        0 => "a",
        1 =>  "c",
        2 =>  "d",
        3 =>  "b"
    ];
    
    $replacement = [1 => $base[3], 3 => $base[1]];
    $res = array_replace($base, $replacement);
    
    print_r($res);
    
    

    结果会是这样

    Array ( [0] => a [1] => b [2] => d [3] => c )
    
    推荐文章