2

我有一个 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'
]
4

3 回答 3

7

为什么不直接使用

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

?

于 2010-09-11T09:50:22.287 回答
3
$dataarray[ $row['id'] ] = $row[ 'data' ];
于 2010-09-11T09:51:24.750 回答
0

它更优雅/富有表现力/现代/简洁,array_column()而不是foreach()用于此任务。

第一个参数是行的输入数组。
第二个参数是要成为输出数组中的值的列。
第三个参数是要成为输出数组中键的列。

代码:(演示

$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',
)

如果您想分配新的第一级键但保持行不变,您可以编写null为本机函数调用的第二个参数。

代码:(演示

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',
  ),
)

一种较少实现的无功能技术是在无主体foreach()循环中使用数组解构。(演示

$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',
)
于 2022-02-08T08:20:57.947 回答