#php #arrays #json
Вопрос:
Я получаю конечную точку, которая принимает некоторые продукты базы данных.
Это конечная точка выводит JSON, который выглядит следующим образом:
idProduct
0 => "21"
colour
0 => "Red"
1 => "Green"
size
0 => "M"
1 => "XS"
Итак, мне нужно составить таблицу , которая показывает colour[0]
с size[0]
, colour[1]
с size[1]
и т. Д.
Основная проблема заключается в том, что я не могу получить доступ по имени столбца (размер и цвет), потому что в другом случае имя может быть способностью, мощью, темнотой и т. Д.
Я пробовал это, но не работает.
echo '<tbody>';
foreach ($array_from_json as $key => $value) {
for ($i=0; $i <= count($value) ; $i ) {
echo "<tr><td>".$value[$i]."</td></tr>";
}
}
echo '</tbody>';
Массив ($array_from_json) показывает это в файле var_dump:
array(3) { ["idProducto"]=> array(1) { [0]=> string(1) "9" } ["color"]=> array(2) { [0]=> string(4) "Azul" [1]=> string(5) "Verde" } ["talla"]=> array(2) { [0]=> string(1) "L" [1]=> string(2) "XL" } }
JSON raw-это: {"idProducto":["9"],"color":["Azul","Verde"],"talla":["L","XL"]}
Комментарии:
1. Почему вы используете
for
intoforeach
??? вместо этого печатайте напрямуюvalue
«нет»?2.
$value$
это тоже массив… Поэтому мне нужно еще раз повторить это3. вместо этого вы можете использовать
foreach
его снова.4. Вам нужно будет более конкретно указать фактический формат той структуры данных, которую вы получаете. Верно ли, что все столбцы, кроме первого, всегда имеют одинаковое количество записей. И верно ли в целом, что все ключи этих записей являются индикатором связи между всеми этими записями?
5. Пожалуйста, также добавьте исходное значение json, которое вы получите обратно.
Ответ №1:
Вы можете сделать что-то вроде этого:
Вы можете получить имена столбцов с помощью array_keys
функции, вам нужно удалить первое имя столбца «idProducto» (потому что вы не хотите повторять его). Этот код будет работать независимо от выбранных вами имен столбцов.
Входные данные (json):
$json = '{"idProducto":["9"],"color":["Azul","Verde"],"talla":["L","XL"]}';
Php-код:
$product = json_decode($json, true); //Convert a Json string to array
$keys = array_keys($product); //Get arrays keys
array_shift($keys); //Delete first key "idProducto"
echo '<table>';
for($i = 0; $i < count($product[$keys[0]]); $i ) {
echo '<tr>';
foreach($keys as $key) {
echo '<td>' . $product[$key][$i] . '</td>';
}
echo '</tr>';
}
echo '</table>';
Вывод (без заголовка таблицы, но вы можете добавить с помощью foreach в начале):
Цвет | talla |
---|---|
Azul | L |
Verde | ХL |