質問: array('おれんじ','あか','きいろ','みどり','きみどり','くろ','しろ','ぴんく','びりじあん'); ↑この配列から、↓このようにしたいです。 array ( [あ行] => array ( [0] => おれんじ [1] => あか ) [か行] => array ( [0] => きいろ [1] => きみどり [2] => くろ ) [ま行] => array ( [0] => みどり ) [さ行] => array ( [0] => しろ ) [は行] => array ( [0] => ぴんく [1] => びりじあん ) )
回答: 以下のコードでどうでしょうか。 ・基本的には、array('あ'=>'あ行', 'い'=>'あ行',...)という、50音の各文字から、分類したい「行名」への配列を作成 ・分類したい各文字列から、最初の1文字を抜き出して、それから行名に変換、それを添え字とする配列要素に追加 といった処理を行っています。 ---ここから--- function syllabary_grouping($data) { $syllabary_base = array( 'あいうえお', 'かきくけこがぎぐげご', 'さしすせそざじずぜぞ', 'たちつてとだぢづでど', 'なにぬねの', 'はひふへほぱぴぷぺぽばびぶべぼ', 'まみむめも', 'やゆよ', 'らりるれろ', 'わをん'); $syllabary = array(); foreach ($syllabary_base as $s) { $len = mb_strlen($s); $c = mb_substr($s,0,1); for ($i = 0; $i < $len; $i++) { $syllabary[mb_substr($s,$i,1)] = $c.'行'; } } print_r($syllabary); $result = array(); foreach ($data as $element) { $c = $syllabary[mb_substr($element, 0,1)]; $result[$c][] = $element; } return $result; } $iro = array('おれんじ','あか','きいろ','みどり','きみどり','くろ','しろ','ぴんく','びりじあん'); print_r(syllabary_grouping($iro)); ---ここまで---