【问题标题】:Mix arrays together将数组混合在一起
【发布时间】:2013-11-20 12:20:15
【问题描述】:

我有这个 PHP 数组:

Array(
    [0] => Array(
      ["Import"]=> Array
          (
              [0] => 1.00
              [1] => 2.00
              [2] => 1.00
              [3] => 9.00
          )

      ["Page"] => Array
          (
              [0] => 1
              [1] => 4
              [2] => 5
              [3] => 6
          )

      ["Key"] => Array
          (
              [0] => 1
              [1] => 22
              [2] => 88
              [3] => 3
          )
    )
)

我需要得到:

Array(
  [0] => Array(
    [0] => Array(
      ["Import"] => 1.00
      ["Page"] => 1
      ["Key"] => 1
    )
    [1] => Array(
      ["Import"] => 2.00
      ["Page"] => 4
      ["Key"] => 22
    )
    [2] => Array(
      ["Import"] => 1.00
      ["Page"] => 5
      ["Key"] => 88
    )
    [3] => Array(
      ["Import"] => 9.00
      ["Page"] => 6
      ["Key"] => 3
    )
  )
)

我检查了 array_merge 和 array_combine,但在这种情况下我找不到使用它们的方法。
我该怎么办?

【问题讨论】:

标签: php arrays


【解决方案1】:

类似这样的:

function switchKeys(Array $input) {
    $result = array();
    foreach ($input as $field => $data) {
        if (is_array($data)) {
            foreach ($data as $index => $value) {
                $result[$index][$field] = $value;
            }
        }
    }
    return $result;
}

$input = array(
    "imports" => array(1.00, 2.00, 1.00, 9.00,),
    "page" => array(1, 4, 5, 6,),
    "key" => array(1, 22, 88, 3,),
);

$output = switchKeys($input);

var_export($input);
var_export($output);

注意你的输入数组多了一层,所以你应该为每个子数组调用函数

【讨论】:

    【解决方案2】:

    在 PHP 5.5 中,您可以使用 array_column() 函数轻松实现:

    $array = [
    'Imports' => ['i0', 'i1'],
    'Page'    => ['p0', 'p1'],
    'Key'     => ['k0', 'k1']
    ];
    
    
    $i = 0;
    $result = array_map(function($x) use ($array, &$i)
    {
       return array_combine(array_keys($array), array_column($array, $i++));
    }, current($array));
    //var_dump($result);
    

    -但对于早期版本,您需要使用 foreach 来收集您的数组,例如:

    $result = [];
    foreach($array as $key=>$item)
    {
       foreach($item as $i=>$value)
       {
          $result[$i][$key] = $value;
       }
    }
    //var_dump($result);
    

    -当然,您需要对父数组的每个元素执行此操作(上面的代码是如何重新排列 2 级数组的示例)。同样,使用array_map()

    可以轻松做到这一点

    【讨论】:

      【解决方案3】:

      试试这个。似乎按您的预期工作。

      <?php
      $source = array(
          array(
              'Imports' => array(
              1.00,2.00,1.00, 9.00),
              'Page' => array(
              1,4,5,6),
              'Key' => array(
              1,22,88,3)
          )
      );
      
      print_r($source);
      $dest = array();
      foreach($source as $key => $src) {
          foreach($src as $typeKey => $typeArr) {
              foreach($typeArr as $index => $val){
                  $dest[$key][$index][$typeKey] = $val;
              }   
          }
      }
      
      print_r($dest);
      ?>
      

      这是一个演示:http://codepad.org/bht4ne7K

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多