我想使用 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"
它只会返回 1 个数据,因为return
在第一个循环中停止。有两种方法可以解决您的问题:
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);
}
}
您可以使用内爆函数来实现这一点:
$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
尝试使用 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);
}
}
如何从我列出的 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...(以及结果。