【问题标题】:Transpose associative array of associative arrays to create associative array of indexed arrays [duplicate]转置关联数组的关联数组以创建索引数组的关联数组[重复]
【发布时间】:2017-02-01 08:04:02
【问题描述】:

我需要重组我的数组,以便将第二级键用作分组的第一级键,并且应将相应的值作为索引元素推入组的子数组中。

这是我的数组:

[username] => Array
    (
        [3805120] => 5
        [3805121] => 7
    )

[login] => Array
    (
        [3805120] => 9
        [3805121] => 11
    )

我需要这样的东西:

[3805120] => Array
    (
        [0] => 5
        [1] => 9
    )

[3805121] => Array
    (
        [0] => 7
        [1] => 11
    )

【问题讨论】:

  • 您到底尝试了什么,失败的原因是什么?
  • 我尝试了 array_replace_recursive 和 array_merge_recursive 但没有成功。
  • 没有一个神奇的 PHP 函数可以直观地理解数组的结构并识别出您想要如何更改它;实际上,您必须自己编写一些代码才能做到这一点
  • @MarkBaker 这不是真的。 array_merge_recursive 完成这项工作,但仅适用于字符串而不适用于整数键。
  • Duly written to use array_merge_recursive() 但是一个简单的循环更容易理解

标签: php arrays grouping transpose


【解决方案1】:

很简单。您需要一个嵌套循环,将子数组的键设置为新数组的键并使用[] 以便将新值“添加”到具有自动增加值 [0,1,...n] 的数组中。

[用户名] => 数组 ( [3805120] => 5 [3805121] => 7 )

[登录名] => 数组 ( [3805120] => 9 [3805121] => 11 )

// $array is the original array
$newArray = array();

foreach($array as $key => $subarray){
  //key: username, login
  foreach($subarray as $j => $k){
    //j: 3805120, 3805121
    //k: 5,7,9,11
    $newArray[$j][] = $k;
    //1st round: $newArray[3805120][0] = 5, $newArray[3805121][0] = 7
    //2nd round: $newArray[3805120][1] = 9, $newArray[3805121][1] = 11 
  }
}

var_dump($newArray);

输出:

数组(2){[3805120]=>数组(2){ [0]=> 字符串(1)“5” [1]=> 字符串(1)“9”}[3805121]=>数组(2){ [0]=> 字符串(1)“7” [1]=> 字符串(2) "11" } }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多