У меня есть этот код для создания объекта массива, я хотел знать, каковы наилучшие методы для этого, и я пытаюсь изучить лучшие практики 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"
}
]
нет, дело в том, что доступ к значениям будет осуществляться с помощью foreach в javascript.
Для этого нет конкретной «лучшей практики». Вы можете сделать это несколькими способами, но пока это работает, дерзайте. В приведенном выше коде нет ничего плохого.
@MagnusEriksson Спасибо. Да, это работает, я просто думаю о другом способе, который легче понять и запомнить.
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что код работает, ОП просто хочет, чтобы мы его рассмотрели. Вместо этого его следует опубликовать в Обзор кода, поскольку SO предназначен для случаев, когда у вас есть вопросы с вашим кодом.
Вы можете сделать это, используя:
$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 — с флагом JSON_FORCE_OBJECT даже массив, содержащий объекты, станет объектом: {"0": {"author_id": '', ...}, "1": {"author_id": ...}}
. Это не очень хорошая структура.
Вы можете использовать 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);
Спасибо за ваше время и ответ, но я думаю, что ответ легче всего запомнить.
Вы можете сделать самый быстрый простой способ
<?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);
Может ли элемент массива быть массивом вместо объекта? это так,
array_map
может сделать это легко