【问题标题】:Extract id and name from array从数组中提取 id 和 name
【发布时间】:2014-07-23 01:07:48
【问题描述】:

我有一些使用 with 的 db 查询的结果,然后我将其转换为数组,因为我只想提取 id 和名称。

我尝试使用 array_only 方法,例如 http://laravel.com/docs/helpers#arrays

$result = array_only($result, ['id', 'user.name']);

它什么也没给我,所以我认为它不支持点符号。

我期待得到

array
    array
       id => 1
       name => Bill Cstevens
    array
       id => 2
       name => Jennyfer Aufderhar
    array
       id => 3
       name => Catharine Kuhlman

这是我正在做的数组。我认为有某种帮手,而无需我自己编写一些代码来循环它。

我也尝试过 $queryResult->lists('user.name', 'id');因为 Collections 支持列表 - 它确实给了我 id 但 user.name 为 null :(

array (size=3)
  0 => 
    array (size=7)
      'id' => string '1'
      'user_id' => string '3'
      'phone' => string '04 346 6337'
      'address' => string '819 Quigley Grove, Jazmynston, 6786'
      'created_at' => string '2014-06-12 19:27:00'
      'updated_at' => string '2014-07-15 05:57:04'
      'user' => 
        array (size=5)
          'id' => string '3'
          'name' => string 'Bill Cstevens'
          'email' => string 'xxxx@example.com'
          'created_at' => string '2014-06-15 22:40:25'
          'updated_at' => string '2014-07-02 06:35:03'
  1 => 
    array (size=7)
      'id' => string '2'
      'user_id' => string '6'
      'phone' => string '06 354 5069'
      'address' => string '7 Bergnaum Mall, Stuartston, '
      'created_at' => string '2014-06-15 22:40:25'
      'updated_at' => string '2014-07-02 06:35:03'
      'user' => 
        array (size=5)
          'id' => string '6'
          'name' => string 'Jennyfer Aufderhar'
          'email' => string 'rudy.baumbach@example.com'
          'created_at' => string '2014-06-15 22:40:25'
          'updated_at' => string '2014-07-02 06:35:03'
  2 => 
    array (size=7)
      'id' => string '3'
      'user_id' => string '7'
      'phone' => string '04 777 9959'
      'address' => string '4 O'Kon Drive, Janville, Hawkes Bay, 1667'
      'created_at' => string '2014-05-31 17:49:09'
      'updated_at' => string '2014-07-12 21:46:06'
      'user' => 
        array (size=7)
          'id' => string '5'
          'name' => string 'Catharine Kuhlman'
          'email' => string 'dimitri50@example.com'
          'created_at' => string '2014-05-31 17:49:09'
          'updated_at' => string '2014-07-12 21:46:06'

【问题讨论】:

  • Short array syntax 仅支持 PHP 5.4,您是否尝试过使用传统符号,例如array('id', 'user.name') 确保不是这样?只是一个想法......
  • 我认为这仍然是一个悬而未决的问题,因为我也在寻找类似的东西。

标签: php arrays laravel


【解决方案1】:

您可能只需组合两个辅助函数:

array_only(array_dot($result), ['id', 'user.name']);

【讨论】:

  • 感谢您的建议,当它转换为 array_dot 时,我得到 0.id、0.user.name 等,所以我不能再使用 array_only...
【解决方案2】:

在集合上使用map

$addresses = $collection->map(function ($address)
{
    return ['id' => $address->id, 'name' => $address->user->name];
});

【讨论】:

    【解决方案3】:

    Dave 提到的内容,或者您​​可以使用 array_get 使用点表示法,它将按照这样的文档检索嵌套数组 -

    $array = array('names' => array('joe' => array('programmer')));
    $value = array_get($array, 'names.joe');
    

    参考http://laravel.com/docs/helpers#arrays

    【讨论】:

    • 不幸的是,这不适用于我拥有的数组,我必须指定 0.user.name 而不仅仅是 user.name
    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2014-04-04
    相关资源
    最近更新 更多