【问题标题】:Construct multidimensional array with array_push用array_push构造多维数组
【发布时间】:2020-06-10 11:19:57
【问题描述】:

希望在下面构造多维数组。 第一个 level-1 没问题,但是第二个设置为相同的 level-1。

问题:

如何指导第二个 foreach 循环在 level-1 下构建 level-2?

想要的结果:

Array
(
    [id_no_1] => Array
        (
            [0] => title_1
        )

    [id_no_2] => Array
        (
            [0] => title_2
        )

)

我的尝试:

<?php

// Position [Level-1]
$taxonomy_id = [
  "id_no_1",
  "id_no_2",
];

// Position [Level-2]
$titles = [
  "title_1",
  "title_2",
];

$array = [];

// Populate [level-1]
foreach ($taxonomy_id as $key => $value) {
  array_push($array, $taxonomy_id["{$key}"]);
}

// Populate [level-2]
foreach ($titles as $key => $value) {
  array_push($array, $titles["{$key}"]);
}


print_r($array);

结果

数组

(
    [0] => id_no_1
    [1] => id_no_2
    [2] => title_1
    [3] => title_2
)

【问题讨论】:

  • 您不能使用array_push 指定密钥。您可能想在这里使用几乎相同的语法,正如您在最近的另一个问题中向您解释的那样,stackoverflow.com/questions/60414697
  • 您想从一个输入数组中获取键,并从另一个输入数组中获取子数组的值 - 因此您需要以某种方式将两者关联起来,而不是分别循环遍历它们。 for 而不是 foreach 循环在这里可能更有意义,它将允许您使用循环计数器同时访问两者的相应值。
  • @CBroe 您的建议最适合这个问题,并且是最直接的方法。请将评论移至答案,我会批准。

标签: php arrays multidimensional-array foreach php-7.3


【解决方案1】:

您想从一个输入数组中获取键,并从另一个输入数组中获取子数组的值 - 所以您需要以某种方式将两者关联起来,而不是分别循环遍历它们。

for 而不是foreach 循环在这里可能更有意义,它将允许您使用循环计数器同时访问两者的相应值。

【讨论】:

    【解决方案2】:

    一个 foreach 有一个简单的解决方案:

        foreach ($taxonomy_id as $key => $item) {
            $array[$item][] = $titles[$key] ?? null;
        }
    

    【讨论】:

    • ?? null 感觉不错
    【解决方案3】:

    我会这样做:

    $result = array_combine($taxonomy_id, array_chunk($titles, 1));
    

    array_chunk($titles, 1) 将每个标题字符串放入一个数组中,然后您可以将其结果用作array_combine() 的值。

    不过,我确实想知道原始的 $taxonomy_id$titles 数组是从哪里来的。如果可能的话,我宁愿在创建它们时寻找一种方法来组合它们,而不是像这样尝试将它们粘在一起。

    【讨论】:

    • 智能解决方案但要小心Both parameters should have an equal number of elements
    • @AlbertoMoro 是的,这绝对很重要。但是,如果两个参数的元素数量不相等,我们不应该一开始就尝试这样做,因为无论我们如何做,结果都不会正确排列,如果我们能以某种方式确定两个参数都有相同数量的元素,那么我认为这可能可以在过程的早期更简单地完成。
    【解决方案4】:

    你可以通过嵌套两个foreach来做到这一点:

    $array = [];
    foreach ($taxonomy_id as $key => $value) {
        foreach ($titles as $key2 => $value2) {
            if ($key == $key2) {
                $array[$value][] = $value2;
            }
        }
    }
    

    你可以测试HERE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 2023-03-26
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 2014-02-26
      相关资源
      最近更新 更多