如何按key的下标来循环成一个新的数组?

image.png
想要这种效果: 通过二维数组中key的下标一样 来循环组成一个新的数组
Array
(

[1] => Array
    (
        [0] => 测试-2票
        [1] => 小白-2票
        [2] => 张张-2票
        
    )

[2] => Array
    (
        [0] => 颜夕-2票
        [1] => 小黑-2票
        [2] => 小黄-2票
    )

[3] => Array
    (
        [0] => 小绿-2票
    )

)

阅读 2k
3 个回答

你这结果里面也不对啊,小绿应该是 2 才对吧,得益于 PHP 自带的 array_map,你可以轻松实现这个功能。

<?php

$arr = [
    ['测试-2票', '颜夕-2票',],
    ['小白-2票', '小黑-2票',],
    ['张张-2票', '小黄-2票', '小绿-2票',],
];


$result = array_map(function (...$list) {
    return $list;
}, ...$arr);

var_dump($result);

如果是在 PHP 7.4+ ,还可以更简单。

$result = array_map(fn(...$i) => $i, ...$arr);
var_dump($result);

如果是题中例子的效果,用foreach暴力实现了。用array_map等也是可以的,更精简一些。

<?php

$arr = [
    ['测试-2票', '颜夕-2票'],
    ['小白-2票', '小黑-2票'],
    ['张张-2票', '小黄-2票', '小绿-2票'],
];

$result = [];

foreach ($arr as $item) {
    foreach ($item as $key => $value) {
        if (!isset($result[$key])) {
            $result[$key] = [];
        }
        $result[$key][] = $value;
    }
}

var_dump($result);

看起来好像是矩阵转置?就是将二维数组的列变成行。我试着写了下代码:

$arr = [
    ['测试-2票', '颜夕-2票'],
    ['小白-2票', '小黑-2票'],
    ['张张-2票', '小黄-2票', '小绿-2票'],
];

$maxCols = max(array_map("count", $arr));
$newArr = [];
for ($i = 0; $i < $maxCols; $i++) {
    $newArr[] = array_column($arr, $i);
}
var_dump($newArr);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题