将特定多维数组键的值转换为新数组中的键,并将原始数组作为值

8

基本上我只想知道是否有内置的方法来做到这一点,可能更快,比如使用array_map回调或其他方式:

function array_rekey($a, $column)
{
    $array = array();
    foreach($a as $keys) $array[$keys[$column]] = $keys;
    return $array;
}

1个回答

12

这对你应该有效:

只需将第二个参数传递为NULL,即可使用array_column()获取完整的数组作为值,并使用$column作为第三个参数来获取键。

$result = array_column($arr, NULL, $column);

示例输入/输出:

$arr = [
        ["a" => 1, "b" => 2, "c" => 3],
        ["a" => 4, "b" => 5, "c" => 6],
        ["a" => 7, "b" => 8, "c" => 9],
    ];

$column = "b";
$result = array_column($arr, NULL, $column);
print_r($result);

输出:

Array
(
    [2] => Array
        (
            [a] => 1
            [b] => 2
            [c] => 3
        )

    [5] => Array
        (
            [a] => 4
            [b] => 5
            [c] => 6
        )

    [8] => Array
        (
            [a] => 7
            [b] => 8
            [c] => 9
        )

)

谢谢。不幸的是,我的专用服务器上没有array_column()函数可用。 - Works for a Living
1
@Thom 你可以使用 array_combine()array_map() 进行一些小的变通,像这样:$result = array_combine( array_map(function($v)use($column){ return $v[$column] }, $a), $a); 或者在 PHP 5.5 以下版本中使用 array_column() - Rizier123
不错,我不知道 array_column 还有这些隐藏参数。 - Mohd Abdul Mujib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接