Php 从一个关联数组弹出并推送到另一个数组
我想从array2跳出来,然后推进array1。 但是根据一些定制要求 现在在数组1中,第一个键的读取顺序是1,第二个键的读取顺序是4 所以我想从array2的前两个键开始,在这两个键之间进行推压。其他所有键的过程都是一样的 我的最终数组必须像array3 例如,在数组1中,键[0]的读取顺序为1,键[1]的读取顺序为4。现在我想按array2的另一个2键。 对于阵列1键[2],读取顺序为6。因此,在使用此键之前,我想从array2中再按一个键,并继续使用相同的键… 阵列1如下所示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
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开始,我想把剩余的位置推给大家。非常感谢。这完全符合我的要求。