Как получить строку из массивов в PHP (Foreach) - PullRequest
0 голосов
/ 09 февраля 2019

Я хочу получить результаты массива, используя foreach.Но я получаю только 1 массив, хотя перед использованием Foreach существует 9 массивов.Как получить строку из результатов 9 массивов, которые я перечислил ниже?

Я использую PHP версии 7.0 с каркасом Laravel 5.0.$ paramsUserId будет заполнен определенным идентификатором пользователя, например, '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"

Ниже приведен результат из 9 массивов, которые я получил безиспользуя foreach с кодом, подобным следующему

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 голосов
/ 09 февраля 2019

Вы можете просто использовать функцию implode для достижения этой цели:

$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
0 голосов
/ 09 февраля 2019

Попробуйте использовать 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);
    }
}
0 голосов
/ 09 февраля 2019

Как получить строку из результатов 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 );

Если желаемый результат - массив, а не строка, возможно, вы достигли своей цели.Когда вы печатаете массив / var_dump, он также показывает индексы массива (0,1,2,3 ...) в результате.

0 голосов
/ 09 февраля 2019

Будет возвращено только 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...