【问题标题】:How to get only array values from multi dimentional array如何从多维数组中仅获取数组值
【发布时间】:2015-12-07 06:26:46
【问题描述】:

我正在 laravel 中做项目。我正在从 user1 变量中的数据库中获取一个值。

foreach($users1 as $us){
                    $uss[$i] = $us->city_id;
                    $users2[$i] = DB::table('provider_city')->select('provider_id')->where('city_id','=', $uss[$i])->get();
                    $i++;
                }
return $users2;

当我返回 user2 时,我得到了 [[{"provider_id":"14785"}],[{"provider_id":"125478"}]] 这样的值。

我只想要 ['14785','125478'] 这样的值。

我知道这可能很简单。提出建议。

【问题讨论】:

  • 你用什么来获取这些数据?
  • 在这类问题中,您需要了解要传递给数组的变量类型,在这种情况下,请检查 ->get() 方法的返回值,看看您有什么。可能不是字符串,这就是为什么您没有预期结果的原因。使用 dd 或 var_dump 来检查。这只是一个提示,下面的其他人已经给了你正确的答案。

标签: php laravel


【解决方案1】:

这可以用json_decode来实现,像这样

$json= '[
    {
      "provider_id": "14785"
    },
    { 
      "provider_id": "125478"
    }
  ]';

$jsonDecoded = json_decode($json);
foreach($jsonDecoded as $item)
{
    //Do something with it, e.g
    echo $item->provider_id;
}

编辑:发现这是一个多维数组

This question 应该会为您指明正确的方向。

【讨论】:

  • 只有使用数组函数有没有其他方法可以做到这一点?
  • 这是一个对象,而不是一个数组。你想怎么做?
  • 其实我想将这些值与数据库值一一比较
  • 您可以通过将此处的值和从数据库中检索到的值放入数组中并遍历它们来检查值来实现这些。但是,您比我们更了解您的项目,因此需要自己编写。假设从数据库中出来的值会以相同的顺序出现,那么你可以循环它们。
  • 我试过了,但我得到了错误,json_decode() 期望参数 1 是字符串,给定数组
【解决方案2】:

实际上有一个 Eloquent 方法 - lists():

$users2[$i] = DB::table('provider_city')
    ->where('city_id','=', $uss[$i])
    ->lists('provider_id')
    ->all();

这将为您提供一个仅包含提供程序 ID 的数组。

最后是否需要all() 调用基本上取决于您使用的 Laravel 版本。

【讨论】:

  • 我猜 all() 部分放错了,lists() 返回一个数组,所以你不能调用 all() ,需要使用一个或另一个,不能同时使用.还是我错了? :)
  • 如果您收到来自all() 的错误,只需将其删除。 :) 这取决于您使用的版本,在以后的版本中您确实需要它。如果lists() 返回的数组应该正是您想要的,对吧? :)
【解决方案3】:

可能是这样的

return DB::table('provider_city')
    ->whereIn('city_id', array_pluck($users1, 'city_id')
    ->lists('provider_id'); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-20
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多