【问题标题】:combine multiple arrays with order of key按键顺序组合多个数组
【发布时间】:2023-03-31 18:40:02
【问题描述】:

例如,我喜欢超过 3 个不同的数组,其元素如下:

第一个数组

hello-1
hi-1

第二个数组

ok-two
hi-2
22-two
hello

第三个数组

hi-3rd
hello3

等等……

我想把这个数组按顺序一一组合。例如,上面 3 个数组的预期输出为:

hello-1 
ok-two
hi-3rd
hi-1
hi-2 
hello3 
22-two 
hello

我试过array_merge()。但是它在完整的第一个数组之后附加了第二个数组,这不是我想要的,所以在这里我有点卡住了,不知道我可以在这里使用哪些函数。有什么提示或想法吗?

【问题讨论】:

  • 所需输出在“hello3”之前有“hello-1”的事实使我无法在这里看到模式。感觉就像一个智商测试问题。你确定你不是要把“hello3”放在“hello-1”之前吗?
  • @KjetilNordin :我真的很抱歉错字..我已将其删除。
  • 与此同时,似乎其他人已经回答了:)。我不精通php,只是在复习问题。没有理由感到抱歉。这就是我们来这里的目的,对吧?互相帮助。我喜欢这个网站。

标签: php arrays multidimensional-array


【解决方案1】:

这应该适合你:

首先我将每个数组的第一个元素放入一个子数组中,然后将第二个值放入下一个子数组中,依此类推,你就得到了这个数组结构:

Array
(
    [0] => Array
        (
            [0] => hello-1
            [1] => ok-two
            [2] => hi-3rd
        )
    //...
) 

在此之后,您可以使用 array_walk_recursive() 循环遍历每个数组值并将每个值放入您的数组中。

<?php

    $arr1 = [
        "hello-1",
        "hi-1",
    ];

    $arr2 = [
        "ok-two",
        "hi-2",
        "22-two",
        "hello",
    ];

    $arr3 = [
        "hi-3rd",
        "hello3",
    ];

    $arr = call_user_func_array("array_map", [NULL, $arr1, $arr2, $arr3]);
    $result = [];
    array_walk_recursive($arr, function($v)use(&$result){
        if(!is_null($v))
            $result[] = $v;
    });

    print_r($result);


?>

输出:

Array
(
    [0] => hello-1
    [1] => ok-two
    [2] => hi-3rd
    [3] => hi-1
    [4] => hi-2
    [5] => hello3
    [6] => 22-two
    [7] => hello
)

【讨论】:

  • 我可以使用超过 3 个数组吗?
  • @Vishnu 当然。只需按顺序添加所有数组,您希望它们在此处的代码中:$arr = call_user_func_array("array_map", [NULL, $arr1, $arr2, $arr3, ...]);
【解决方案2】:

我有另一种方法来解决这个问题

<?php
$arr1 = array(
        "hello-1",
        "hi-1");

$arr2 = array("ok-two",
              "hi-2",
              "22-two",
              "hello");

$arr3 = array(
    "hi-3rd",
    "hello3");

$max = count($arr1);
$max = count($arr2) > $max ? count($arr2) : $max;
$max = count($arr3) > $max ? count($arr3) : $max;

$result = array();
for ($i = 0; $i < $max; $i++) {
    if (isset($arr1[$i])) {
        $result[] = $arr1[$i];
    }

    if (isset($arr2[$i])) {
        $result[] = $arr2[$i];
    }

    if (isset($arr3[$i])) {
        $result[] = $arr3[$i];
    }
}

print_r($result);

【讨论】:

    猜你喜欢
    • 2019-05-08
    • 2012-09-02
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多