【问题标题】:PHP: Convert Object to Associative Array with Object Property as KeyPHP:将对象转换为以对象属性为键的关联数组
【发布时间】:2018-08-01 18:10:53
【问题描述】:

在 PHP 中,我想将如下对象数组转换为 PHP 数组,使用其中一个属性作为关联数组键。

[
  { "id": 2, "name": "Suzy" },
  { "id": 3, "name": "Joe" },
  { "id": 4, "name": "Sara" }
]

像这样……

[
  2 => "Suzy",
  3 => "Joe",
  4 => "Sara"
]

我不能使用 array_map 因为你不能根据我的理解设置键,但我想知道是否有一种没有 foreach 循环的单线方法。

明确地说,我想维护输出数组中的键,而不是像这里那样将原始键放入新数组值中:PHP's array_map including keys

【问题讨论】:

  • 为什么你不想使用foreach
  • @vivek_23 如果可能的话,我只想要一个班轮。我能想到的只有 4 行。
  • 这是堆栈溢出的糟糕问题吗?
  • @marekful 我看不出有什么相同之处。他们没有维护输出数组中的键,他们想要的输出将原始键放在新的数组值中。

标签: php arrays object


【解决方案1】:

它出现的“对象”是指 JSON 对象。鉴于此,您可以使用array_column() 从每一行中提取一列,然后使用array_combine() 将一列用于键,另一列用于值:

$json = '[
    { "id": 2, "name": "Suzy" },
    { "id": 3, "name": "Joe" },
    { "id": 4, "name": "Sara" }
]';
$array = json_decode($json, true);
$out = array_combine(array_column($array, 'id'), array_column($array, 'name'));
print_r($out);

产量:

Array
(
    [2] => Suzy
    [3] => Joe
    [4] => Sara
)

【讨论】:

  • 这很棒。它不是 json,只是一个对象数组。我不知道另一种方式来展示它。但这对我来说看起来不错。谢谢。
  • 请注意,如果对象实现了 ArrayAccess,这应该在对象上正常工作。
【解决方案2】:

2 个衬垫,但有一个 foreach。

<?php

$json = '[
  { "id": 2, "name": "Suzy" },
  { "id": 3, "name": "Joe" },
  { "id": 4, "name": "Sara" }
]';

$new_array = [];
foreach(json_decode($json,true) as $each_object) $new_array[$each_object['id']] = $each_object['name'];

print_r($new_array);

【讨论】:

    【解决方案3】:
    $json = '[
        { "id": 2, "name": "Suzy" },
        { "id": 3, "name": "Joe" },
        { "id": 4, "name": "Sara" }
    ]';
    $array = json_decode($json, true);
    $result = array_column($array, 'name', 'id');
    

    【讨论】:

      猜你喜欢
      • 2011-05-19
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      相关资源
      最近更新 更多