如何在Laravel中的对象数组中获取特定项目

时间:2019-01-31 19:53:56

标签: php mysql laravel

因此,我需要从Laravel中的对象数组中获取特定项目。

首先,我在这里进行选择:

public function example($userId)
{
    $type = DB::table('users_type')
                     ->select('type_a', 'type_b', 'type_c')
                     ->where(function ($query) use ($userId)
                     {
                         $query->where('user_id', '=', $userId);
                     })
                     ->get();
    return $type;
}

好吧,我在(type_atype_btype_c)对象数组中拥有所有记录,看起来像这样:

[
    {
        "type_a": 0,
        "type_b": 0,
        "type_c": 0
    },
    {
        "type_a": 1,
        "type_b": 1,
        "type_c": 1
    },
    {
        "type_a": 1,
        "type_b": 0,
        "type_c": 1
    },
]

我在控制器做出这个代码:

//calling the function example
$type_ticket = example($user_id);

//get the types from the first register from the array 
//of objects that I returned from the function example
$type_a = $type_ticket[0]->type_a;
$type_b = $type_ticket[0]->type_b;
$type_c = $type_ticket[0]->type_c;

现在,我只需要获取其中一个元组。 例如,其中一个(type_a = 1type_b = 0type_c = 1)。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以循环阵列,并比较针对子阵列的array_value。

foreach($arr as $key => $sub){
    if(array_values($sub) == [1,0,1]){
        $res[$key] = $sub;
    }
}
var_dump($res);

输出

array(1) {
  [2]=>
  array(3) {
    ["type_a"]=>
    int(1)
    ["type_b"]=>
    int(0)
    ["type_c"]=>
    int(1)
  }
}

https://3v4l.org/1dtNZ

答案 1 :(得分:0)

您可以尝试使用收藏集https://laravel.com/docs/5.7/collections#method-where

类似:

//calling the function example
$type_ticket = example($user_id)->where('type_a', 1)->where('type_b', 0)->where('type_c', 1);

您的功能也可以稍微简化

public function example($userId)
{
    return DB::table('users_type')
                     ->select('type_a', 'type_b', 'type_c')
                     ->whereUserId($userId)
                     ->get();
}