从数组中提取id和name

时间:2014-07-23 01:07:48

标签: php arrays laravel

我有一些使用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->列表(' user.name',' id');因为集合支持列表 - 它确实给了我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'

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

在集合上使用map

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

答案 2 :(得分:0)

Dave提到了什么,或者您可以使用点符号来使用array_get,这将根据这样的文档检索嵌套数组 -

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

请参阅http://laravel.com/docs/helpers#arrays