Как отсортировать многомерный массив, сгруппировать по первой букве и вывести в три колонки?
Есть массив подключаюсь, сортирую, определяю первую букву и ссылку, Разбивает строку (из имени первую букву), соединяю, буквы и слова разбиваю, похожие отфильтровываем, подсчитываю и разбиваю на три колонки, после вывожу в цикле. Значение выводятся первая буква выводится, а ссылка не выводится. подскажите где ошибка, как вытащить и перебрать ссылки.
print_r($array);
:
Array ( [0] => Array ( [0] => A [1] => Array ( [/manuf/list.php?SECTION_ID=230] => ALFAPARF Milano ) [2] => Array ( [/manuf/list.php?SECTION_ID=246] => ART de CO ) [3] => Array ( [/manuf/list.php?SECTION_ID=282] => AUSTRALIAN GOLD ) [4] => Array ( [/manuf/list.php?SECTION_ID=311] => Alterna ) [5] => Array ( [/manuf/list.php?SECTION_ID=279] => Andrea ) [6] => Array ( [/manuf/list.php?SECTION_ID=263] => Ardell ) [7] => Array ( [/manuf/list.php?SECTION_ID=232] => Atopalm ) [8] => B [9] => Array ( [/manuf/list.php?SECTION_ID=319] => BOSLEY ) [10] => Array ( [/manuf/list.php?SECTION_ID=249] => Be natural ) [11] => Array ( [/manuf/list.php?SECTION_ID=277] => Beaujoleot ) [12] => Array ( [/manuf/list.php?SECTION_ID=264] => Bio Creative Labs, BCL ) [13] => C [14] => Array ( [/manuf/list.php?SECTION_ID=250] => CHI ) [15] => Array ( [/manuf/list.php?SECTION_ID=296] => Checi ) [16] => Array ( [/manuf/list.php?SECTION_ID=274] => ColorOn Professional ) [17] => Array ( [/manuf/list.php?SECTION_ID=287] => Constant Delight ) [18] => Array ( [/manuf/list.php?SECTION_ID=307] => Cutrin ) [19] => D [20] => Array ( [/manuf/list.php?SECTION_ID=300] => DERMA-B ) [21] => Array ( [/manuf/list.php?SECTION_ID=234] => Daeng Gi Meo Ri ) [22] => Array ( [/manuf/list.php?SECTION_ID=251] => Divaderme ) [23] => Array ( [/manuf/list.php?SECTION_ID=252] => Dr. Kadir ) [24] => E [25] => Array ( [/manuf/list.php?SECTION_ID=278] => Esteemia ) [26] => F [27] => Array ( [/manuf/list.php?SECTION_ID=227] => Framesi ) [28] => G ) [1] => Array ( [0] => Array ( [/manuf/list.php?SECTION_ID=228] => GUAM ) [1] => H [2] => Array ( [/manuf/list.php?SECTION_ID=305] => HairOn ) [3] => Array ( [/manuf/list.php?SECTION_ID=255] => Health & Beauty ) [4] => Array ( [/manuf/list.php?SECTION_ID=257] => Human-Like Collagen ) [5] => I [6] => Array ( [/manuf/list.php?SECTION_ID=294] => INM ) [7] => J [8] => Array ( [/manuf/list.php?SECTION_ID=283] => JANSSEN ) [9] => K [10] => Array ( [/manuf/list.php?SECTION_ID=291] => KEUNE ) [11] => Array ( [/manuf/list.php?SECTION_ID=225] => KLAPP ) [12] => Array ( [/manuf/list.php?SECTION_ID=318] => Kirkland ) [13] => Array ( [/manuf/list.php?SECTION_ID=286] => KГ©rastase ) [14] => L [15] => Array ( [/manuf/list.php?SECTION_ID=303] => L'OREAL PROFESSIONNEL ) [16] => Array ( [/manuf/list.php?SECTION_ID=242] => LA MENTE ) [17] => Array ( [/manuf/list.php?SECTION_ID=265] => LebeL Cosmetics ) [18] => M [19] => Array ( [/manuf/list.php?SECTION_ID=314] => MACADAMIA ) [20] => Array ( [/manuf/list.php?SECTION_ID=301] => MBeauty ) [21] => Array ( [/manuf/list.php?SECTION_ID=236] => MLE GOWOONSESANG ) [22] => Array ( [/manuf/list.php?SECTION_ID=262] => Majic Beauty, Eye Majic ) [23] => Array ( [/manuf/list.php?SECTION_ID=256] => Med-Beauty ) [24] => Array ( [/manuf/list.php?SECTION_ID=237] => Medical Collagene 3D ) [25] => Array ( [/manuf/list.php?SECTION_ID=238] => MoltoBenРµ ) [26] => Array ( [/manuf/list.php?SECTION_ID=298] => Morien ) [27] => Array ( [/manuf/list.php?SECTION_ID=302] => Moroccanoil ) [28] => N ) [2] => Array ( [0] => Array ( [/manuf/list.php?SECTION_ID=270] => Natural Project ) [1] => O [2] => Array ( [/manuf/list.php?SECTION_ID=239] => ORIHIRO ) [3] => Array ( [/manuf/list.php?SECTION_ID=235] => OSEC HWANGTO ) [4] => Array ( [/manuf/list.php?SECTION_ID=258] => Oxygen Botanicals ) [5] => P [6] => Array ( [/manuf/list.php?SECTION_ID=288] => Paul Mitchell ) [7] => Array ( [/manuf/list.php?SECTION_ID=254] => Premier ) [8] => Array ( [/manuf/list.php?SECTION_ID=284] => Premier, GRATiAE ) [9] => R [10] => Array ( [/manuf/list.php?SECTION_ID=266] => REN ) [11] => Array ( [/manuf/list.php?SECTION_ID=295] => Red Carpet ) [12] => Array ( [/manuf/list.php?SECTION_ID=289] => Redken ) [13] => S [14] => Array ( [/manuf/list.php?SECTION_ID=269] => SAMPAR ) [15] => Array ( [/manuf/list.php?SECTION_ID=253] => SEA OF SPA ) [16] => Array ( [/manuf/list.php?SECTION_ID=299] => SECRET KEY ) [17] => Array ( [/manuf/list.php?SECTION_ID=260] => SKIN DOCTORS Cosmeceuticals ) [18] => Array ( [/manuf/list.php?SECTION_ID=285] => SUPER MILLION HAIR ) [19] => Array ( [/manuf/list.php?SECTION_ID=313] => Sebastian Professional ) [20] => Array ( [/manuf/list.php?SECTION_ID=297] => Surgi Wax ) [21] => T [22] => Array ( [/manuf/list.php?SECTION_ID=243] => Tom Robinn ) [23] => W [24] => Array ( [/manuf/list.php?SECTION_ID=310] => Welcos ) [25] => Z [26] => Array ( [/manuf/list.php?SECTION_ID=233] => Zeroid ) ) )
<?php
$json = file_get_contents("arResult.json");
$data = json_decode($json, true);
usort($data['0']['SECTIONS'], "custom_sort");
function custom_sort($a,$b) {
return $a['NAME']>$b['NAME'];
}
foreach ($data['0']['SECTIONS'] as $word) {
$link = $word['SECTION_PAGE_URL'];
$char = preg_split('~~u', $word['NAME'], -1, PREG_SPLIT_NO_EMPTY)[0];
$new_arr[$char][][$link] = $word['NAME'];
}
echo '<table class="city_list">';
foreach ($new_arr as $letter => $word_list) {
$view[] = $letter;
foreach ($word_list as $word) {
$view[] = $word;
}
}
$result[]= array_filter($view);
$cols = ceil(count($view) / 3);
$array = array_chunk($view, $cols);
?>
<?php print_r($array); ?> // массив выше разместил
<tr>
<?php
for ($i = 0; $i < $cols; $i++): ?>
<?php foreach($array as $val): ?>
<td>
<a href="<?php print_r($link);?>"><?php print_r($val[$i]);?></a>
</td>
<?php endforeach; ?>
</tr>
<?php endfor; echo '</table>'; ?>
<style>
.city_list td {
border: 1px solid #ddd;
padding: 7px 10px;
}
Ответы (1 шт):
Автор решения: Evgeny
→ Ссылка
Пример ответа, Json для разбора Разобрался, надеюсь будет полезен разбор многомерного массива. Реализована сортировка по алфавиту, вывод первой буквы(как у словаря), объедение в списки и оглавление списка буквой (повторяющие не выводим), вывод ссылки с значением.
<?php
$json = file_get_contents("arResult.json");
$data = json_decode($json, true);
usort($data['0']['SECTIONS'], "custom_sort");
function custom_sort($a,$b) {
return $a['NAME'] <=> $b['NAME'];
}
$oldchar = '';
foreach ($data['0']['SECTIONS'] as $word) {
$link = $word['SECTION_PAGE_URL'];
$char = mb_substr($word['NAME'],0,1);
if ($oldchar !== $char) {
$view[] = $char;
}
$view[] = ['link' => $link, 'name' => $word['NAME']];
$oldchar = $char;
}
$rows = ceil(count($view) / 3);
$array = array_chunk($view, $rows);
echo '<table class=city_list>'; // только ради подсветки здесь, иначе сбивается
?>
<?php for ($i = 0; $i < $rows; $i++): ?>
<tr>
<?php foreach($array as $val): ?>
<td>
<?php if(!isset($val[$i])): ?>
<?php elseif(is_string($val[$i])): ?>
<?= htmlspecialchars($val[$i]) ?>
<?php else: ?>
<a href="<?= htmlspecialchars($val[$i]['link']) ?>">
<?= htmlspecialchars($val[$i]['name']) ?>
</a>
<?php endif ?>
</td>
<?php endforeach ?>
</tr>
<?php endfor ?>
</table>
<style>
.city_list td {
border: 1px solid #ddd;
padding: 7px 10px;
}
</style>