3v4l.org

run code in 300+ PHP versions simultaneously
<?php $data = [ ['アーチ橋', 'アーチの過重負担方法による分類', '無補剛アーチ', '固定アーチ'], ['アーチ橋', 'アーチの過重負担方法による分類', '無補剛アーチ', '2ヒンジアーチ'], ['アーチ橋', 'アーチの過重負担方法による分類', '補剛アーチ', 'ランガー', 'ランガー'], ['アーチ橋', 'アーチの過重負担方法による分類', '補剛アーチ', 'ランガー', 'トラストランガー'], ['アーチ橋', 'アーチの過重負担方法による分類', '補剛アーチ', 'ローゼ', 'ローゼ'], ['アーチ橋', 'アーチの過重負担方法による分類', '補剛アーチ', 'ローゼ', '逆ローゼ'], ['アーチ橋', 'アーチ部材の形態による分類', 'ソリッドリブアーチ'], ['アーチ橋', 'アーチ部材の形態による分類', 'パイプアーチ'], ['トラス橋', 'トラスの支持方法による分類', '単純トラス'], ['トラス橋', 'トラスの支持方法による分類', '連続トラス'], ['トラス橋', 'トラスの形状による分類', '平行弦トラス'], ['トラス橋', 'トラスの形状による分類', '曲弦トラス'], ]; $result = []; foreach ($data as $row) { $value = \end($row); $key = \key($row); unset($row[$key]); $keys = $row; $tmp = &$result; foreach ($keys as $key) { if (!isset($tmp[$key])) { $tmp[$key] = null; } $tmp = &$tmp[$key]; } if ($tmp === null) { $tmp = $value; } elseif (!\is_array($tmp)) { $tmp = [$tmp, $value]; } else { $tmp[] = $value; } } echo \json_encode($result, \JSON_PRETTY_PRINT|\JSON_UNESCAPED_UNICODE);

preferences:
83.58 ms | 406 KiB | 5 Q