Установить массив ключей без цикла с оператором распространения в php - PullRequest
0 голосов
/ 14 ноября 2018

Я использую язык программирования php с фреймворком Laravel, я хочу вводить те же данные без необходимости использовать циклы, код, который у меня сейчас есть:

$userIds = Subscriber::pluck('user_id')->toArray();

    $data = [];

    foreach ($userIds as $userId) {
        $dataTemporary = [
            'lang' => 'id',
            'is_read' => false,
            'is_count' => false,
            'user_id' => $userId,
        ];

        array_push($data, $dataTemporary);
    }

тогда я попробовал несколько способов, один из которых использует php Spread Operators

    function merge($data, ...$userIds)
    {
        return array_merge($data, $userIds);
    }

    $data = [
        'lang' => 'id',
        'is_read' => false,
        'is_count' => false
    ];

    $userIds = Subscriber::pluck('user_id')->toArray();

    merge($data, ...$userIds);

в настоящее время, мой вывод похож на

[
  {
    "lang" => "id",
    "is_read" => false,
    "is_count" => false,
    0 => "5b0172aa5e4f857ed36c0fb7",
    1 => "581c457addfb68a848d47002"
  }
]

и вывод, который я хочу

[
  {
    "lang" => "id",
    "is_read" => false,
    "is_count" => false,
    "user_id" => "5b0172aa5e4f857ed36c0fb7",
   },
   {
    "lang" => "id",
    "is_read" => false,
    "is_count" => false,
    "user_id" => "581c457addfb68a848d47002",
   }
]

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Спасибо за помощь @Nigel Ren, может быть, код более уместен:

$userIds = Subscriber::pluck('user_id')->toArray(); 
$data = array_map(function ($id) {  
return 
   (object)[ 
    'lang' => 'id', 
    'is_read' => false, 
    'is_count' => false, 
    "user_id" => $id 
   ]; 
},$userIDs); 

echo($data);
0 голосов
/ 14 ноября 2018

Вы можете использовать различные методы (и все же думаете, что foreach - это хороший способ сделать это), он просто использует array_map(), чтобы добавить новые данные в предопределенный массив ...

$userIds = Subscriber::pluck('user_id')->toArray();
$data = array_map(function ($id) { 
    return [
        'lang' => 'id',
        'is_read' => false,
        'is_count' => false,
        "user_id" => $id
    ];
},$userIDs);

echo json_encode($data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...