Цикл через массив json и группировка по ключевым значениям
После json_decode у меня есть следующий массив:::
$json = Array ( [name] => Array ( [0] => Peter [1] => David ) [dep] => Array ( [0] => accounts [1] => sales ) [date] => Array ( [0] => 10/27/2015 [1] => 09/25/2015 ) );
Как я могу сгруппировать значения по ключам, чтобы получить следующее в цикле PHP foreach ? :::
<ul>
<li>Peter, accounts, 10/27/2015</li>
<li>David, sales, 09/25/2015</li>
</ul>
Я пробовал аналогичный цикл foreach (см. ниже) без желаемых результатов, я могу печатать все ключи и значения, но я не могу группировать значения по ключам, например. [1]:::
foreach($json as $row){
foreach($row as $key=>$val){
echo $key . ': ' . $val . '<br>';
}
}
Любая помощь будет признательна:::
2 ответов:
Для сортировки списка можно использовать следующий код:
<?php $json = [ "name" => ["Peter","David"], "dep" => ["accounts", "sales"], "date" => ["10/27/2015","09/25/2015"] ]; $final = []; foreach($json as $section) { foreach($section as $key=>$info) { if(!isset($final[$key])) $final[$key] = ""; $final[$key] .= $info . ", "; } } echo "<ul>"; foreach($final as $row) { echo "<li>" . substr($row, 0, strlen($row) - 2) . "</li>"; // -2 to remove the extra ", " } echo "</ul>"; ?>Результат:
<ul> <li>Peter, accounts, 10/27/2015</li> <li>David, sales, 09/25/2015</li> </ul>
Возможно, попробуйте что-то вроде этого:
$arrayCount = count($json['name']); $output = '<ul>'; for($i = 0; $i < $arrayCount; $i++) { $output .= '<li>'; $output .= $json['name'][$i] . ', '; $output .= $json['dep'][$i] . ', '; $output .= $json['date'][$i]; $output .= '</li>'; } $output .= '</ul>'; echo $output;Вам также было бы лучше использовать такой формат массива:
$json = Array( Array( 'name' => 'Peter', 'dep' => 'accounts', 'date' => '10/27/2015' ), Array( 'name' => 'David', 'dep' => 'accounts', 'date' => '09/25/2015' ) );Это потому, что вы можете создать более простой для понимания цикл foreach, как это:
$output = '<ul>'; foreach($json as $row) { $output .= '<li>'; $output .= $row['name'] . ', '; $output .= $row['dep'] . ', '; $output .= $row['date']; $output .= '</li>'; } $output .= '</ul>'; echo $output;
Comments