Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从一个关联数组弹出并推送到另一个数组_Php_Arrays_Sorting_Arraylist - Fatal编程技术网

Php 从一个关联数组弹出并推送到另一个数组

Php 从一个关联数组弹出并推送到另一个数组,php,arrays,sorting,arraylist,Php,Arrays,Sorting,Arraylist,我想从array2跳出来,然后推进array1。 但是根据一些定制要求 现在在数组1中,第一个键的读取顺序是1,第二个键的读取顺序是4 所以我想从array2的前两个键开始,在这两个键之间进行推压。其他所有键的过程都是一样的 我的最终数组必须像array3 例如,在数组1中,键[0]的读取顺序为1,键[1]的读取顺序为4。现在我想按array2的另一个2键。 对于阵列1键[2],读取顺序为6。因此,在使用此键之前,我想从array2中再按一个键,并继续使用相同的键… 阵列1如下所示 Array

我想从array2跳出来,然后推进array1。 但是根据一些定制要求

现在在数组1中,第一个键的读取顺序是1,第二个键的读取顺序是4

所以我想从array2的前两个键开始,在这两个键之间进行推压。其他所有键的过程都是一样的

我的最终数组必须像array3

例如,在数组1中,键[0]的读取顺序为1,键[1]的读取顺序为4。现在我想按array2的另一个2键。 对于阵列1键[2],读取顺序为6。因此,在使用此键之前,我想从array2中再按一个键,并继续使用相同的键…

阵列1如下所示

Array
(
    [0] => Array
        (
            [readingOrder] => 1
            [id] => 78
        )

    [1] => Array
        (
            [readingOrder] => 4
            [id] => 76
        )

    [2] => Array
        (
            [readingOrder] => 6
            [id] => 80
        )

)
Array
(
    [0] => Array
        (
            [id] => 81
            [readingOrder] => 2
        )

    [1] => Array
        (
            [id] => 82
            [readingOrder] => 5
        )

    [2] => Array
        (
            [id] => 84
            [readingOrder] => 7
        )

    [3] => Array
        (
            [id] => 85
            [readingOrder] => 8
        )

    [4] => Array
        (
            [id] => 86
            [readingOrder] => 9
        )

    [5] => Array
        (
            [id] => 87
            [readingOrder] => 10
        )

    [6] => Array
        (
            [id] => 88
            [readingOrder] => 11
        )

)
阵列2如下所示

Array
(
    [0] => Array
        (
            [readingOrder] => 1
            [id] => 78
        )

    [1] => Array
        (
            [readingOrder] => 4
            [id] => 76
        )

    [2] => Array
        (
            [readingOrder] => 6
            [id] => 80
        )

)
Array
(
    [0] => Array
        (
            [id] => 81
            [readingOrder] => 2
        )

    [1] => Array
        (
            [id] => 82
            [readingOrder] => 5
        )

    [2] => Array
        (
            [id] => 84
            [readingOrder] => 7
        )

    [3] => Array
        (
            [id] => 85
            [readingOrder] => 8
        )

    [4] => Array
        (
            [id] => 86
            [readingOrder] => 9
        )

    [5] => Array
        (
            [id] => 87
            [readingOrder] => 10
        )

    [6] => Array
        (
            [id] => 88
            [readingOrder] => 11
        )

)
输出阵列3:

Array
(
    [0] => Array
        (
            [readingOrder] => 1
            [id] => 78
        )

    [1] => Array
        (
            [id] => 81
            [readingOrder] => 2
        )

    [2] => Array
        (
            [id] => 82
            [readingOrder] => 5
        )

    [3] => Array
        (
            [readingOrder] => 4
            [id] => 76
        )

    [4] => Array
        (
            [id] => 84
            [readingOrder] => 7
        )

    [5] => Array
        (
            [readingOrder] => 6
            [id] => 80
        )

    [6] => Array
        (
            [id] => 85
            [readingOrder] => 8
        )

    [7] => Array
        (
            [id] => 86
            [readingOrder] => 9
        )

    [8] => Array
        (
            [id] => 87
            [readingOrder] => 10
        )

    [9] => Array
        (
            [id] => 88
            [readingOrder] => 11
        )

)

谢谢。

您可以使用
usort
完成此操作。首先,需要合并阵列:

$a1 = [
    [
        'readingOrder' => 1,
        'id' => 78
    ],
    [
        'readingOrder' => 4,
         'id' => 76
    ],
    [
        'readingOrder' => 6,
        'id' => 80
    ]
];
$a2 = [
    [
        'readingOrder' => 2,
        'id' => 81
    ],
    [
        'readingOrder' => 5,
        'id' => 82
    ],
    [
        'readingOrder' => 7,
        'id' => 84
    ],
    [
        'readingOrder' => 8,
        'id' => 85
    ]
];

$a3 = array_merge($a1, $a2);
然后您需要使用
usort

usort($a3, function($a,$b) {
    if ($a['readingOrder'] == $b['readingOrder']) return 0;
    return $a['readingOrder'] < $b['readingOrder'] ? -1 : 1;
});

您可以这样构建阵列:

$current = 1;
$arr3 = [];
while ( $arr1 && $arr2 ) {
    if ( $arr1[0]['readingOrder'] > $current )
        $arr3[] = array_shift($arr2);
    else
        $arr3[] = array_shift($arr1);
    $current++;
}

$arr3 = array_merge($arr3, $arr1, $arr2);

print_r($arr3);

请注意,此代码对
$arr1
$arr2
具有破坏性。如果您想保留它们,请先复制它们,然后改用副本。

您以前为获得正确输出所做的尝试是什么样的?更具体地说,你想解决什么问题?@GordonM我编辑了我的问题。现在请阅读。你不明白@GordonM问了什么,问题是:你为什么需要这样做?(你能展示一下你解决问题的努力吗?)这不是他问的问题。@Casimirithippolyte我的错。我必须说,他想要达到的目标也不是很清楚。想要的结果很清楚,但他想这样做的原因是一个很深的谜。@Casimirithippolyte,这让我不清楚哈,事实上我想保持阅读秩序。从array2开始,我想把剩余的位置推给大家。非常感谢。这完全符合我的要求。