<?php
$rows = [
['cat' => 'guest', 'name' => 'name_one', 'y' => '2016', 'q' => '2', 'st' => 1],
['cat' => 'guest', 'name' => 'name_one', 'y' => '2017', 'q' => '3', 'st' => 2],
['cat' => 'guest', 'name' => 'name_two', 'y' => '2017', 'q' => '1', 'st' => 1],
['cat' => 'guest', 'name' => 'name_two', 'y' => '2017', 'q' => '2', 'st' => 2],
];
$data = [];
foreach ($rows as $row) {
$link = &$data;
foreach (['cat', 'name', 'y'] as $field) {
if (!isset($link[$row[$field]])) $link[$row[$field]] = [];
$link = &$link[$row[$field]];
}
$link[$row['q']] = $row['st'];
unset($link);
}
print_r($data);
preferences:
57.52 ms | 402 KiB | 5 Q