Как отсортировать многомерный массив, сгруппировать по первой букве и вывести в три колонки?

Есть массив подключаюсь, сортирую, определяю первую букву и ссылку, Разбивает строку (из имени первую букву), соединяю, буквы и слова разбиваю, похожие отфильтровываем, подсчитываю и разбиваю на три колонки, после вывожу в цикле. Значение выводятся первая буква выводится, а ссылка не выводится. подскажите где ошибка, как вытащить и перебрать ссылки.

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>
→ Ссылка