Рекомендации по объединению массивов

У меня есть этот код для создания объекта массива, я хотел знать, каковы наилучшие методы для этого, и я пытаюсь изучить лучшие практики php.

$authorId = array("1", "2");
$authorName = array("Juan Cruz", "Jose Rizal");
$authorSname = array("J. Cruz", "J. Rizal");

for ($i = 0; $i < count($authorId); $i++) {
  array_push($authorValue, array(
     "author_id" => $authorId[$i],
     "author_name" => $authorName[$i],
     "author_sname" => $authorSname[$i],
  ));
}

а также это будет результат преобразования этого кода в JSON.

[
    {
        "author_id": "1",
        "author_name": "Juan Cruz",
        "author_sname": "J. Cruz"
    },
    {
        "author_id": "2",
        "author_name": "Jose Rizal",
        "author_sname": "J. Rizal"
    }
]

Может ли элемент массива быть массивом вместо объекта? это так, array_map может сделать это легко

dWinder 13.06.2019 08:54

нет, дело в том, что доступ к значениям будет осуществляться с помощью foreach в javascript.

rektph 13.06.2019 08:56

Для этого нет конкретной «лучшей практики». Вы можете сделать это несколькими способами, но пока это работает, дерзайте. В приведенном выше коде нет ничего плохого.

M. Eriksson 13.06.2019 08:57
"для создания объекта массива" — вы не создаете «объекты массива», вы создаете многомерный массив. В PHP это всего лишь массивы.
M. Eriksson 13.06.2019 08:58

@MagnusEriksson Спасибо. Да, это работает, я просто думаю о другом способе, который легче понять и запомнить.

rektph 13.06.2019 09:00

Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что код работает, ОП просто хочет, чтобы мы его рассмотрели. Вместо этого его следует опубликовать в Обзор кода, поскольку SO предназначен для случаев, когда у вас есть вопросы с вашим кодом.

M. Eriksson 13.06.2019 09:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
62
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете сделать это, используя:

$authorId = array("1", "2");
$authorName = array("Juan Cruz", "Jose Rizal");
$authorSname = array("J. Cruz", "J. Rizal");

$keys = array("author_id", "author_name", "author_sname");
$res = array_map(null, $authorId, $authorName, $authorSname);
$res = array_map(function ($e) use ($keys) {return json_encode(array_combine($keys, $e), JSON_FORCE_OBJECT);}, $res);

Используйте JSON_FORCE_OBJECT для преобразования в json

Ссылка: массив-объединение, массив-карта

Я использую json_encode, JSON_FORCE_OBJECT лучше?

rektph 13.06.2019 09:02

@rektph — с флагом JSON_FORCE_OBJECT даже массив, содержащий объекты, станет объектом: {"0": {"author_id": '', ...}, "1": {"author_id": ...}}. Это не очень хорошая структура.

M. Eriksson 13.06.2019 09:05

Вы можете использовать array_map

$res = [];
$key=0;
array_map(function($v1,$v2,$v3) use(&$res,&$key){
    $res[] = [
     'author_id'   => $v1,
     'author_name' => $v2, 
     'author_sname'=> $v3
  ];
 $key++;
}, $authorId,$authorName,$authorSname);
echo json_encode($res);

Живая демонстрация

Спасибо за ваше время и ответ, но я думаю, что ответ легче всего запомнить.

rektph 13.06.2019 09:09

Вы можете сделать самый быстрый простой способ

<?php

$authorId = array("1", "2");
$authorName = array("Juan Cruz", "Jose Rizal");
$authorSname = array("J. Cruz", "J. Rizal");
$res = [];
foreach($authorId as $key => $value){
    $res[] = [
        'author_id'   => $value,
        'author_name' => $authorName[$key], 
        'author_sname'=> $authorSname[$key]
    ];
}
echo json_encode($res);

ДЕМО

Другие вопросы по теме