【问题标题】:PHP: How do I combine multiple associative arrays into a multidimensional array?PHP:如何将多个关联数组组合成一个多维数组?
【发布时间】:2015-05-07 18:12:37
【问题描述】:

考虑 php 中的三个关联数组:

$a1 = array(
"a" => "1",
"b" => "2",
"c" => "3"
);

$a2 = array(
"d" => "4",
"e" => "5",
"f" => "6"
);

$a3 = array(
"g" => "7",
"h" => "8",
"i" => "9"
);

您将如何有效地将它们组合成一个多维数组,如下所示:

$result = array(
"1" => array("4","7"),
"2" => array("5","8"),
"3" => array("6","9")
);

提前致谢!

【问题讨论】:

  • 你有没有尝试过实现你的目标?
  • 规则是什么? $a1 提供键,$a2/$a3 提供值吗?
  • 你的意思是"1" => array("1","4","7"),
  • @castis,没有键应该是 $a1 的值:"1" => array("4","7")
  • @MarkBaker - 正确!

标签: php arrays multidimensional-array associative-array


【解决方案1】:

与我昨晚回答的几个问题非常相似:

$a1 = array(
"a" => "1",
"b" => "2",
"c" => "3"
);

$a2 = array(
"d" => "4",
"e" => "5",
"f" => "6"
);

$a3 = array(
"g" => "7",
"h" => "8",
"i" => "9"
);

$x = array_combine(
    $a1,
    call_user_func_array('array_map', [null, $a2, $a3])
);
var_dump($x);

【讨论】:

  • 好吧,我准备了完全相同的答案,只是解释了代码的作用,现在我在等待 OP 展示一些努力和一些工作!但是现在 OP 得到了他的糖果!
  • 完美!我希望我现在可以把这个奖励给你!由于旧的 php 安装,最初在我的服务器上失败。接受答案后,我将其更正为 call_user_func_array('array_map', array(null, $a2, $a3)) 并且现在运行良好。它比我接受的要短。
  • @MarkBaker stackoverflow.com/q/30131528 您在 OP 的新问题中看到更多、更少或相同的努力(与此相比)?此外,由于他以这种质量发布了这个问题,他可能认为他会通过这种努力获得他的代码。而正是这种行为来自于回答这样的问题! (没有表现出任何努力)
【解决方案2】:

相当直接:

foreach($a1 as $val) {
    $result[$val] = array(array_shift($a2), array_shift($a3));
}

【讨论】:

    【解决方案3】:

    这是你的意思吗?

      <?php
    
    $a1 = array(
        "a" => "1",
        "b" => "2",
        "c" => "3"
    );
    
    $a2 = array(
        "d" => "4",
        "e" => "5",
        "f" => "6"
    );
    
    $a3 = array(
        "g" => "7",
        "h" => "8",
        "i" => "9"
    );
    
    $a1_ = array_values($a1);
    $a2_ = array_values($a2);
    $a3_ = array_values($a3);
    
    $newarray = array();
    $max = count($a1_);
    for($i = 0; $i < $max; $i++) {
        $newarray[$a1_[$i]] = array($a2_[$i], $a3_[$i]);
    }
    
    var_dump($newarray);
    

    哪个输出

    array(3) {
      [1]=>
      array(2) {
        [0]=>
        string(1) "4"
        [1]=>
        string(1) "7"
      }
      [2]=>
      array(2) {
        [0]=>
        string(1) "5"
        [1]=>
        string(1) "8"
      }
      [3]=>
      array(2) {
        [0]=>
        string(1) "6"
        [1]=>
        string(1) "9"
      }
    }
    

    【讨论】:

    • 有效,但我必须处理 30-50 个数组 - 必须声明 $a1_ = array_values($a1); $a2_ = 数组值($a2); $a3_ = 数组值($a3);看起来很拖沓。
    【解决方案4】:

    首先将所有数组组合成一个多维数组。

    $arrays = array();
    array_push($arrays,$a1) //Do the same for the rest
    

    创建另一个数组并循环遍历我们刚刚创建的数组。

    $result = array();
    foreach($arrays as $a) {
        $result[$a[0]] = array_shift($a);
    }
    

    这会将第一个值从数组中拉出并使其成为键。然后它使用 array_shift 弹出数组的第一个元素,因此它不包含在赋值中。

    这是否符合您的要求?

    注意:这对于任何大小的数组和任意数量的数组都是可扩展的。只需使用 array_push 将您想要包含的任何数组添加到 $arrays 中,它将遵循您上面概述的模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 2018-07-06
      • 2013-03-09
      • 1970-01-01
      相关资源
      最近更新 更多