やりたいのはこういうこと

元の配列データ

$array=Array(
 array ( "name" => "山田太郎"   ,"name_kana" => "やまだたろう"    ,"cnt" =>"4" ),
 array ( "name" => "岩鬼正美"   ,"name_kana" => "いわきまさみ"    ,"cnt" =>"1" ), 
 array ( "name" => "殿馬一人"   ,"name_kana" => "とのまかずと"    ,"cnt" =>"2" ), 
 array ( "name" => "里中智"     ,"name_kana" => "さとなかさとる"  ,"cnt" =>"9" ), 
 array ( "name" => "微笑三太郎" ,"name_kana" => "ほほえみさんたろう" ,"cnt" =>"3" ), 
 array ( "name" => "沢田京太"   ,"name_kana" => "さわだきょうた"   ,"cnt" =>"1" ), 
 array ( "name" => "北 満男"    ,"name_kana" => "きたみつお"     ,"cnt" =>"1" ), 
 array ( "name" => "徳川 家康"  ,"name_kana" => "とくがわいえやす" ,"cnt" =>"4" ), 
 array ( "name" => "山田サチ子" ,"name_kana" => "やまださちこ"     ,"cnt" =>"1" )
);

これを、

あ行
岩鬼正美(1)
か行
北 満男(1)
さ行
里中智(9)
沢田京太(1)
た行
徳川 家康(4)
殿馬一人(2)
は行
微笑三太郎(3)
や行
山田サチ子(1)
山田太郎(4)

 

ってな具合にグループ化して並び直して表示するPHPのコードです。

ここでコードを動かしています。

PHPのサンプルコードもダウンロードできます。

Wordpressで、カスタムフィールドを使ったソート表示などにお使いください。

カナソートPHPデモページ(ダウンロードあり)

<?php

$array=Array(
 array ( "name" => "山田太郎"   ,"name_kana" => "やまだたろう"    ,"cnt" =>"4" ),
 array ( "name" => "岩鬼正美"   ,"name_kana" => "いわきまさみ"    ,"cnt" =>"1" ), 
 array ( "name" => "殿馬一人"   ,"name_kana" => "とのまかずと"    ,"cnt" =>"2" ), 
 array ( "name" => "里中智"     ,"name_kana" => "さとなかさとる"  ,"cnt" =>"9" ), 
 array ( "name" => "微笑三太郎" ,"name_kana" => "ほほえみさんたろう" ,"cnt" =>"3" ), 
 array ( "name" => "沢田京太"   ,"name_kana" => "さわだきょうた"   ,"cnt" =>"1" ), 
 array ( "name" => "北 満男"    ,"name_kana" => "きたみつお"     ,"cnt" =>"1" ), 
 array ( "name" => "徳川 家康"  ,"name_kana" => "とくがわいえやす" ,"cnt" =>"4" ), 
 array ( "name" => "山田サチ子" ,"name_kana" => "やまださちこ"     ,"cnt" =>"1" )
);


//元データを あいうえお順にソート
foreach ((array) $array as $key => $value) {
    $sort[$key] = $value['name_kana'];
}
array_multisort($sort,$array);


$kana = array(
"あ行" => "[あ-お]",
"か行" => "[か-こが-ご]",
"さ行" => "[さ-そざ-ぞ]",
"た行" => "[た-とだ-ど]",
"な行" => "[な-の]",
"は行" => "[は-ほば-ぼぱ-ぽ]",
"ま行" => "[ま-も]",
"や行" => "[や-よ]",
"ら行" => "[ら-ろ]",
"わ行" => "[わ-ん]",
"その他" => ".*"
);
echo "<h1>元の配列</h1><br>\n";
//元の配列の内容確認
print_r($array);

//処理ココから

//結果格納用配列 $result 初期化
$result = array();
//人名データ配列を1行(中身は連想配列)でループ
foreach ( $array as $line){
//あ行などのマッチ判定用変数を初期化    
 $match = FALSE;
//人名データのname_kanaに対して、上記の$kana配列をループさせる
    foreach( $kana as $key => $pattern){
        //name_kanaに $kana配列の[あ-お]などのパターンがマッチしたら
        if (preg_match("/^" . $pattern . "/u", $line['name_kana'])) {
            //結果格納用配列$resultに、$kanaのキー名に名前・cntの合成文字列を代入
            $result[$key][] = $line['name']."(".$line['cnt'].")";
            //マッチ判定をTRUEに
            $match = TRUE;
            //$kanaのループを抜ける
            break;
        }
    }
    
}
echo "<h2>結果配列表示</h2><br>\n";
//結果格納配列の内容を表示
print_r($result);

//求める処理
echo "<h2>求める文字列の表示部分です</h2>\n";

foreach($result as $kana => $namearray){

    echo $kana."\n";
    echo "<ul>\n";
    foreach($namearray as  $namecnt){
        $name = preg_replace('/\(\d*\)/','',$namecnt );
        echo "<li><a href=\"siteurl/meta?key=".$name."\">".$namecnt."</a></li>\n";
        
    }
    echo "</ul>\n";    
}

?>