php 使用一列作为键,另一列作为值,从行数组生成关联数组

zpf6vheq  于 2023-02-07  发布在  PHP
关注(0)|答案(3)|浏览(134)

我有一个MySQL结果集,每行有2个值。
每次循环这些结果时,我都想将它们添加到一个数组中。
我希望一个值是键,另一个是数组值。
我试过了,但是好像不起作用:

$dataarray[] = $row['id'] => $row['data'];

如果我有:

$resultSet = [
    ['id' => 1, 'data' => 'one'],
    ['id' => 2, 'data' => 'two'],
    ['id' => 3, 'data' => 'three']
];

我想要生成:

[
    1 => 'one',
    2 => 'two',
    3 => 'three'
]
6rvt4ljy

6rvt4ljy1#

为什么不直接用

$dataarray[$row['id']] = $row['data'];

elcex8rz

elcex8rz2#

$dataarray[ $row['id'] ] = $row[ 'data' ];
mbjcgjjk

mbjcgjjk3#

对于此任务,使用array_column()而不是foreach()会更优雅/更有表现力/更现代/更简洁。
第一个参数是行的输入数组。
第二个参数是要成为输出数组中值的列。
第三个参数是要成为输出数组中键的列。
代码:(Demo

$array = [
    ['id' => 1, 'key' => 'foo', 'data' => 'a'],
    ['id' => 2, 'key' => 'bar', 'data' => 'b'],
    ['id' => 3, 'key' => 'barf', 'data' => 'c'],
];

var_export(
    array_column($array, 'data', 'id')
);

输出:

array (
  1 => 'a',
  2 => 'b',
  3 => 'c',
)

在集合上调用的Laravel等效方法是pluck(),如下所示:

$collection->pluck('data', 'id')

如果您希望分配新的第一级键,但保留行不变,则可以将null作为本机函数调用的第二个参数。
代码:(Demo

var_export(
    array_column($array, null, 'id')
);

输出:

array (
  1 => 
  array (
    'id' => 1,
    'key' => 'foo',
    'data' => 'a',
  ),
  2 => 
  array (
    'id' => 2,
    'key' => 'bar',
    'data' => 'b',
  ),
  3 => 
  array (
    'id' => 3,
    'key' => 'barf',
    'data' => 'c',
  ),
)

一种实现较少、没有功能的技术是在a body-less foreach() loop中使用数组重构。(Demo

$array = [
    ['id' => 1, 'data' => 'a'],
    ['id' => 2, 'data' => 'b'],
    ['id' => 3, 'data' => 'c'],
];

$result = [];
foreach ($array as ['id' => $id, 'data' => $result[$id]]);
var_export($result);

这与前面的回答是相同的:

foreach ($array as $row) {
    $result[$row['id']] = $row['data'];
}

输出:

array (
  1 => 'a',
  2 => 'b',
  3 => 'c',
)

相关问题