【问题标题】:Combine arrays to form multidimensional array in php在php中组合数组形成多维数组
【发布时间】:2010-11-29 06:34:11
【问题描述】:

我知道有很多答案,但我似乎无法正确回答。我有以下数组和我尝试过的:

$a = array ( 0 => '1421' , 1 => '2241' );
$b = array ( 0 => 'teststring1' , 1 => 'teststring2' );
$c = array ( 0 => 'teststring3' , 1 => 'teststring4' );
$d = array ( 0 => 'teststring5' , 1 => 'teststring6' );

$e = array_combine($a, array($b,$c,$d) );

但是这样我得到了错误array_combine() [function.array-combine]: Both parameters should have an equal number of elements

我知道这是因为$a 的数组值不是键。这就是为什么我来这里看看是否可以得到一些帮助,以帮助我使它看起来像这样:

array(2) {

  [1421]=>array( [0] => teststring1
                 [1] => teststring3
                 [2] => teststring5
                )

  [2241]=>array( [0] => teststring2
                 [1] => teststring4
                 [2] => teststring6
               )


}

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    如果你可以控制创建数组,你应该像这样创建它们:

    $a = array ('1421' ,'2241');
    $b = array ('teststring1', 'teststring3', 'teststring5');
    $c = array ('teststring2', 'teststring4', 'teststring6');
    
    $e = array_combine($a, array($b,$c) );
    

    如果没有,你必须遍历它们:

    $result = array();
    $values = array($b, $c, $d);
    
    foreach($a as $index => $key) {
        $t = array();
        foreach($values as $value) {
            $t[] = $value[$index];
        }
        $result[$key]  = $t;
    }
    

    DEMO

    【讨论】:

    • 我刚刚编辑并发现了一个与此类似的循环。我已经删除了我的编辑,我将其标记为已解决。我使用了你的循环,因为我比我写的更喜欢它。谢谢! PS。感谢您添加有关无法控制它们的信息,因为自从我使用了array_fill.
    【解决方案2】:

    这是功能编码风格的单行代码。使用null 函数参数调用array_map(),后跟“值”数组将生成所需的子数组结构。 array_combine() 进行键=>值关联。

    代码 (Demo)

    var_export(array_combine($a, array_map(null, $b, $c, $d)));
    

    输出:

    array (
      1421 => 
      array (
        0 => 'teststring1',
        1 => 'teststring3',
        2 => 'teststring5',
      ),
      2241 => 
      array (
        0 => 'teststring2',
        1 => 'teststring4',
        2 => 'teststring6',
      ),
    )
    

    超级干净,对吧?我知道。当您无法控制初始数组生成步骤时,这是一个有用的小技巧。

    【讨论】:

      【解决方案3】:

      这是一个新版本的 array_merge_recursive,它将处理整数键。让我们知道它是怎么回事。

      $a = array ( 0 => '1421' , 1 => '2241' );
      $b = array ( 0 => 'teststring1' , 1 => 'teststring2' );
      $c = array ( 0 => 'teststring3' , 1 => 'teststring4' );
      $d = array ( 0 => 'teststring5' , 1 => 'teststring6' );
      
      $e = array_combine($a, array_merge_recursive2($b, $c, $d));
      echo "<pre>";
      print_r($e);
      
      
      
      function array_merge_recursive2() {
          $args = func_get_args();
          $ret = array();
      
          foreach ($args as $arr) {
              if(is_array($arr)) {
                  foreach ($arr as $key => $val) {
                      $ret[$key][] = $val;
                  }
              }
          }
          return $ret;
      }
      

      【讨论】:

        猜你喜欢
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多