如何从PHP(Foreach)中的数组中获取字符串

时间:2019-02-09 03:36:28

标签: php laravel foreach

我想使用foreach获得数组的结果。但是我得到的只有1个数组,即使在使用Foreach之前,也有9个数组。 如何从下面列出的9个数组的结果中获取字符串?

我将PHP 7.0版与Laravel 5.0框架一起使用。 $ paramsUserId将使用特定的user_id填充,例如'10729'

private function itemNotReco($paramsUserId = null)
{
    try{
        $result = DB::connection('read')->table('recommendation_events')
            ->where('user_id', $paramsUserId);

        if ($result) {
            $result = $result->distinct()->get(['item_id']);
        }

        foreach ($result as $re){
            $re = $re->item_id;
        }
        return $re;

    } catch (\Exception $e) {
        $log = ['Service' => 'RecommendationEventService', 'function' => 'getItemNotRecommendation'];
        logError($e, $log);
    }
}

结果(使用邮递员):

"77178"

下面是我不使用foreach并使用如下代码的9个数组的结果

private function itemNotReco($paramsUserId = null)
{
    try{
        $result = DB::connection('read')->table('recommendation_events')
            ->where('user_id', $paramsUserId);

        if ($result) {
            $result = $result->distinct()->get(['item_id']);
        }
        return  array_column($result, 'item_id');
    } catch (\Exception $e) {
        $log = ['Service' => 'RecommendationEventService', 'function' => 'getItemNotRecommendation'];
        logError($e, $log);
    }
}

结果:

array:9 [
  0 => 77196
  1 => 77263
  2 => 77202
  3 => 77262
  4 => 77275
  5 => 77259
  6 => 77345
  7 => 77329
  8 => 77178
]

我想要的结果是这样的(使用邮递员)

"77196", "77263", "77202", "77262", "77275", "77259", "77345", "77329", "77345", "77329", "77178"

4 个答案:

答案 0 :(得分:1)

由于return在第一个循环中停止,因此它将仅返回1个数据。有两种方法可以解决您的问题:

1。。使用echo代替return

2。。将数据存储在这样的新变量中:

private function itemNotReco($paramsUserId = null)
{
    try{
        $result = DB::connection('read')->table('recommendation_events')
            ->where('user_id', $paramsUserId);

        if ($result) {
            $result = $result->distinct()->get(['item_id']);
        }

        $data = [];
        foreach ($result as $re){
            $data[] = $re->item_id;
        }
        return $data;

    } catch (\Exception $e) {
        $log = ['Service' => 'RecommendationEventService', 'function' => 'getItemNotRecommendation'];
        logError($e, $log);
    }
}

答案 1 :(得分:1)

尝试使用array_push

private function itemNotReco($paramsUserId = null)
{
    try{
        $result = DB::connection('read')
                   ->table('recommendation_events')
                    ->where('user_id', $paramsUserId);

        $item_ids = [];
        if ($result) {
             $this_contain_item_ids = $result->distinct();

             foreach($this_contain_item_ids as $id){
                   array_push($item_ids, $id['item_id']);
             }
        }
        return  $item_ids;

    } catch (\Exception $e) {
         $log = ['Service' => 'RecommendationEventService', 
                 'function' => 'getItemNotRecommendation'];
         logError($e, $log);
    }
}

答案 2 :(得分:0)

  

如何从我列出的9个数组的结果中获取字符串   在下面?

     

我想要的结果是这样的

     

[“ 77196”,“ 77263”,“ 77202”,“ 77262”,“ 77275”,“ 77259”,“ 77345”,   “ 77329”,“ 77345”,“ 77329”,“ 77178”]

据我了解,您希望将结果数组转换为上述的JSON字符串。尝试json_encode()

if( $result ) {
   $result = $result->distinct()->get(['item_id']);
}
$arr = array_column( $result, 'item_id' );
return json_encode( $arr );

如果您想要的结果是数组而不是字符串,那么您可能已经实现了目标。当您print_r / var_dump一个数组时,它也会在结果中显示数组索引(0,1,2,3 ...)。

答案 3 :(得分:0)

您只需使用内爆功能即可实现:

$a = [111,222,333,455,5123,1116,713,811];

$b = implode(',',$a);

print_r($b);

内爆之前:

Array
(
    [0] => 111
    [1] => 222
    [2] => 333
    [3] => 455
    [4] => 5123
    [5] => 1116
    [6] => 713
    [7] => 811
)

之后:

111,222,333,455,5123,1116,713,811