TLDR; 我的问题与PHP不同.是否可以将array_column与对象数组一起使用.我只想更改数组中的键并保留对象,而不是将对象的值存储在单独的数组中,如给定的答案.
我想将具有对象的数组的键设置为对象的值.所以这个数组:
$array = Array
(
[0] => stdClass Object
(
[id] = 12234
[value] = some value
)
[1] => stdClass Object
(
[id] = 12994
[value] = some value
)
)
Run Code Online (Sandbox Code Playgroud)
应该成为:
$array = Array
(
[12234] => stdClass Object
(
[id] = 12234
[value] = some value
)
[12994] => stdClass Object
(
[id] = 12994
[value] = some value
)
)
Run Code Online (Sandbox Code Playgroud)
现在我可以遍历阵列,但我更喜欢更清洁的解决方案.我认为这应该有效:
$newArray = array_column($array, null, 'id');
Run Code Online (Sandbox Code Playgroud)
唯一的问题是我有一个对象数组而不是数组数组,我还没有使用PHP7.现在我在PHP上发现了一个类似的问题 .是否可以将array_column与对象数组一起使用
但问题是它没有恢复我的预期.原因如下:
$newArray = array_map(function($o) {
return is_object($o) ? $o->id : $o['id'];
}, $array);
Run Code Online (Sandbox Code Playgroud)
返回
Array
(
[0] => 12234
[1] => 12994
)
Run Code Online (Sandbox Code Playgroud)
谁知道一个干净的解决方案(所以没有for或foreach循环)为此?
$array = array_combine(array_map(function ($o) { return $o->id; }, $array), $array);
Run Code Online (Sandbox Code Playgroud)
foreach除了"但是,功能性编程......"之外,这是否真的比简单的循环要好得多.,是值得商榷的.