array_column包含一个对象数组

Eri*_*Ven 2 php arrays

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循环)为此?

dec*_*eze 5

$array = array_combine(array_map(function ($o) { return $o->id; }, $array), $array);
Run Code Online (Sandbox Code Playgroud)

foreach除了"但是,功能性编程......"之外,这是否真的比简单的循环要好得多.,是值得商榷的.

  • 请注意,这可能比`foreach`慢很多,因为会产生函数调用开销,临时值和多次迭代而不是一次.它可能与底线无关,但要注意. (2认同)