PHPで、ある配列の内容(ひらがな)を、読み(あ行~わ行)で分けて配列に代入したいのですがどのようにすればよいかわかりません。
どなたかご教示いただけませんでしょうか?
PHPのバージョンは5.2.5です。

具体的には以下のようにしたいです。


$iro = array('おれんじ','あか','きいろ','みどり','きみどり','くろ','しろ','ぴんく','びりじあん');

↑この配列から、↓このようにしたいです。
 
Array
(
 [あ行] => Array
  (
   [0] => おれんじ
   [1] => あか
  )
 [か行] => Array
  (
   [0] => きいろ
   [1] => きみどり
   [2] => くろ
  )
 [ま行] => Array
  (
   [0] => みどり
  )
 [さ行] => Array
  (
   [0] => しろ
  )
 [は行] => Array
  (
   [0] => ぴんく
   [1] => びりじあん
  )
)

このQ&Aに関連する最新のQ&A

A 回答 (3件)

文字コードが UTF-8 なら下記のプログラムで上手く行きました


$result が仕分け後の配列になります


$iro = array('おれんじ','あか','きいろ','みどり','きみどり','くろ','しろ','ぴんく','びりじあん');

$kana = array(
"あ行" => "[あ-お]",
"か行" => "[か-こが-ご]",
"さ行" => "[さ-そざ-ぞ]",
"た行" => "[た-とだ-ど]",
"な行" => "[な-の]",
"は行" => "[は-ほば-ぼぱ-ぽ]",
"ま行" => "[ま-も]",
"や行" => "[や-よ]",
"ら行" => "[ら-ろ]",
"わ行" => "[わ-ん]",
"その他" => ".*"
);

$result = array();
foreach ($iro as $value) {

$match = false;
foreach ($kana as $index => $pattern) {
if (preg_match("/^" . $pattern . "/u", $value)) {
$result[$index][] = $value;

$match = true;
break;
}
}
}

print_r($result);
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます
おかげさまで、希望どおりに出来ました。
ありがとうございました。

お礼日時:2011/04/16 11:09

ためしにこんな感じで・・・


mb_internal_encodingで正しい文字コードを指定してください

<?PHP
mb_internal_encoding("EUC-JP");
function gyouwake($iro = NULL){
foreach((array) $iro as $val){
$str=mb_substr(mb_convert_kana(mb_substr($val,0,1),"hk"),0,1);
$replace_of = array('ア','イ','ウ','エ','オ',
'カ','キ','ク','ケ','コ',
'サ','シ','ス','セ','ソ',
'タ','チ','ツ','テ','ト',
'ナ','ニ','ヌ','ネ','ノ',
'ハ','ヒ','フ','ヘ','ホ',
'マ','ミ','ム','メ','モ',
'ヤ','ユ','ヨ',
'ラ','リ','ル','レ','ロ',
'ワ','ヲ','ン');
$replace_by = array('あ行','あ行','あ行','あ行','あ行',
'か行','か行','か行','か行','か行',
'さ行','さ行','さ行','さ行','さ行',
'た行','た行','た行','た行','た行',
'な行','な行','な行','な行','な行',
'は行','は行','は行','は行','は行',
'ま行','ま行','ま行','ま行','ま行',
'や行','や行','や行',
'ら行','ら行','ら行','ら行','ら行',
'わ行','わ行','わ行');
$gyo=in_array($str,$replace_of)?str_replace($replace_of,$replace_by,$str):"その他";
$array[$gyo][]=$val;
}
return $array;
}

$iro = array('おれんじ','あか','きいろ','みどり','きみどり','くろ','しろ','ぴんく','びりじあん','ミズイロ','無色');

print "<pre>";
print_r(gyouwake($iro));
print "</pre>";

?>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
参考にさせていただき、希望どおりに出来ました。
ありがとうございました。

お礼日時:2011/04/16 11:10

以下のコードでどうでしょうか。


・基本的には、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));
---ここまで---
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
参考にさせていただき、希望どおりに出来ました。
ありがとうございました。

お礼日時:2011/04/16 11:10

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qなりたい職業とかなかったり、やりたい勉強でないのに大学に行く意味ってありますかね? 勉強したいなら独

なりたい職業とかなかったり、やりたい勉強でないのに大学に行く意味ってありますかね?
勉強したいなら独学でやればいいし、どうせ大学出てもろくな職につけない低い大学とかなら結局出る意味ありませんよね

四年間学費かなりの額払わないと行けないし特に意味がない大学生活四年間なら行く意味ありませんよね?

Aベストアンサー

なりたい職業とかなかったり、やりたい勉強で
ないのに大学に行く意味ってありますかね?
  ↑
大学で勉強する間に、なりたい職業、やりたい
勉強が見つかる場合もあります。

大学のための受験勉強をすることにより
頭脳が鍛えられます。
実質的な差は、実はここにあるのです。
顔つきまで変わります。



勉強したいなら独学でやればいいし、
  ↑
そんなのは、一分の天才以外はムリです。


どうせ大学出てもろくな
職につけない低い大学とかなら結局出る意味ありませんよね
  ↑
それはそうですね。
そんな大学なら、受験勉強などしないだろうし。
しかしです。




四年間学費かなりの額払わないと行けないし特に意味が
ない大学生活四年間なら行く意味ありませんよね?
  ↑
青春時代に遊ぶ、ということはかなり意味が
ありますよ。
人生に対する考え方まで違ってきます。

Q【PHP】配列を連想配列に

$m = array('a', 'b', 'c');

この配列 $m をもとに

$n = array(
 'a' => array(
  'b' => array(
   'c' => array())));

上のような連想配列 $n をつくりたいのですが、

$n = array(
 $m[0] => array(
  $m[1] => array(
   $m[2] => array())));

要素の数が固定のときは、これでもいいのですが、数が変動する場合に対応できません。
何か方法があれば教えてください。

Aベストアンサー

こういうあれかなーと。

https://ideone.com/leSNw

Q捜査行(そうさこう)とはどう意味なのか教えてください。

よく推理小説で「捜査行」という意味が載っているのですが、どうしても意味がつかめません漢字に詳しい方で知っている方どうか教えてくださいお願いします。

Aベストアンサー

「行」という漢字の、一番普通の意味は「行く」です。
「旅に行く」は旅行です。
ANo.1さんのご回答にも出ていますが、短歌や俳句を作りに出かけること(小旅行が多い)を「吟行」といいます。「吟」は「詩吟」の「吟」で詩などを歌うことです。
山の好きな人が山へ行く、登山に行くことを「山行(さんこう)」といいます。
(親の結婚承諾が取れない男女が駆け落ちして)方々を逃げ隠れしながら旅をすることを「逃避行」といいます。
犯人も追っ手を逃れるために、あちこちと「逃避行」をします。

警察も「逃避行」をしている犯人の足取りを追って【捜査行】をします。
また、直接犯人を捕まえるのではなく、証拠を調べるために【捜査行】をすることもあります。

「捜査行」という言葉は、今回のご質問で、はじめて知りました。辞書にもありません。推理小説に出ていたということですから、以上のような意味に取りましたが、当たっていますか(ANo.1さんと同じですが)。

Qphpで、連想配列を普通の配列に変換する関数

タイトル通りなのですが、phpで、連想配列を普通の配列に変換する関数ってありますでしょうか?

$a = array("one" => "Sunday", "two" => "Monday", "three" => "Tuesday");
$b = array(0 => "Sunday", 1 => "Monday", 2 => "Tuesday");

$a配列を、$bに変換したいのです。


http://php.benscom.com/manual/ja/ref.array.php
この辺とかは見てみたのですが、無いように見えました(見過ごしているような気もするのですが)。

無論、そういう機能を持つ関数は簡単に作れますが、既にphp自身で実装されているなら、それを使いたいと思います。

ありましたら、よろしくお願いいたします。

Aベストアンサー

当方環境では全くテストしていません

こいつら、ダメかな?
http://jp2.php.net/array_keys
http://jp2.php.net/array_values

Q弁護士の追行における、「追行」の意味を教えてください。

サービサー法第11条第2項において、「債権回収会社は、委託を受けて債権の管理若しくは回収の業務を行い、又は譲り受けた債権の管理若しくは回収の業務を行う場合において、次に掲げる手続きについては、弁護士に追行させなければならない。」とありますが、「追行」とはどういう意味ですか。法律用語で一般に使われる「追行」の意味でも結構です。大至急回答いただければ幸いです。

Aベストアンサー

弁護士がその手続をしなければならないという意味です。訴訟手続で主張立証を展開するのに必要な各種申立とか主張立証をすることを、「訴訟を追行する」と言ったりします。質問の背景も分からないので、とりあえずこの位でいいですか?

Qphp 2つの配列の内、片方を元にして、1つの配列にしたい

Data AとData Bをもとに
Data Cを作成したいのです。
※DataAに無くても、DataBにあるものはDataCに格納したい。

*Data A*
----------------------------
index | indexA | Name
----------------------------
1    100   A_Test1
2    101   A_Test2
3    102   A_Test3
4    103   A_Test4
5    104   A_Test5
6    105   A_Test6
7    106   A_Test7


*Data B*
----------------------------
index | indexA | flg
----------------------------
11   100   1
12   101   0
13   102   1
14   103   1
15   104   1
16   106   0


*Data C* indexAをkeyに結合
-------------------------------
index | ndexA | Name | flg
-------------------------------
1    100  A_Test1  1
2    101  A_Test2  0
3    102  A_Test3  1
4    103  A_Test4  1
5    104  A_Test5  1
6    NULL  A_Test6  0
7    106  A_Test7  0


arrayDataA = Array( [0] => Array([indexA]=> 100 [Name] = A_Test1
          [1] => Array([indexA]=> 101 [Name] = A_Test2
          [2] => Array([indexA]=> 102 [Name] = A_Test3
          [3] => Array([indexA]=> 103 [Name] = A_Test4
          [4] => Array([indexA]=> 104 [Name] = A_Test5
          [5] => Array([indexA]=> 105 [Name] = A_Test6
          [6] => Array([indexA]=> 106 [Name] = A_Test7
         ))

arrayDataB = Array( [0] => Array([indexA]=> 100 [flg] = 1
          [1] => Array([indexA]=> 101 [flg] = 0
          [2] => Array([indexA]=> 102 [flg] = 1
          [3] => Array([indexA]=> 103 [flg] = 1
          [4] => Array([indexA]=> 104 [flg] = 1
          [5] => Array([indexA]=> 106 [flg] = 1
         ))
というところまで格納するこはできたのですが
この、arrayDataAとarrayDataBを元に
arrayDataCを作成したいのです。

初歩的なことかと思いますが、
どのように、プログラムを書くと実現できるのでしょうか?

よろしくお願いいたします。

Data AとData Bをもとに
Data Cを作成したいのです。
※DataAに無くても、DataBにあるものはDataCに格納したい。

*Data A*
----------------------------
index | indexA | Name
----------------------------
1    100   A_Test1
2    101   A_Test2
3    102   A_Test3
4    103   A_Test4
5    104   A_Test5
6    105   A_Test6
7    106   A_Test7


*Data B*
----------------------------
index | indexA | flg
-------------------...続きを読む

Aベストアンサー

なんか非効率的な書き方かもしれませんが、こんな感じでどうでしょう?
これであれば$arrayDataAか$arrayDataBのどちらかに存在すれば
$arrayDataCに収めることができます

<?
$arrayDataA = Array(
'0' => Array('indexA'=> '100', 'Name' => 'A_Test1')
,'1' => Array('indexA'=> '101', 'Name' => 'A_Test2')
,'2' => Array('indexA'=> '103', 'Name' => 'A_Test4')
);

$arrayDataB = Array(
'0' => Array('indexA'=> '100', 'flg' => '1')
,'1' => Array('indexA'=> '101', 'flg' => '0')
,'2' => Array('indexA'=> '102', 'flg' => '1')
);
$arrayDataC=Array();
foreach($arrayDataA as $key=> $array){$indexAlist[$array['indexA']]['AKey']=$key;}
foreach($arrayDataB as $key=> $array){$indexAlist[$array['indexA']]['BKey']=$key;}
ksort($indexAlist);
$count=1;
foreach($indexAlist as $key=> $array){
$C=&$arrayDataC[$count++];
$C['indexA']=$key;
$C['Name']=$arrayDataA[$array['AKey']]['Name'];
$C['flg']=$arrayDataB[$array['BKey']]['flg'];
}
print "<pre>";
print_r($arrayDataC);
print "</pre>";
?>

ちなみに要件のなかに$arrayDataCは1から始まるような指定があったので
そのように対応しましたが、ふつうは配列は0からはじまります

なんか非効率的な書き方かもしれませんが、こんな感じでどうでしょう?
これであれば$arrayDataAか$arrayDataBのどちらかに存在すれば
$arrayDataCに収めることができます

<?
$arrayDataA = Array(
'0' => Array('indexA'=> '100', 'Name' => 'A_Test1')
,'1' => Array('indexA'=> '101', 'Name' => 'A_Test2')
,'2' => Array('indexA'=> '103', 'Name' => 'A_Test4')
);

$arrayDataB = Array(
'0' => Array('indexA'=> '100', 'flg' => '1')
,'1' => Array('indexA'=> '101', 'flg' => '0')
,'...続きを読む

Q定員割れの地方私立大学に行く意味ありますか?子供が勉強出来ないんですが、大学に行きたいと言っています

定員割れの地方私立大学に行く意味ありますか?子供が勉強出来ないんですが、大学に行きたいと言っています。行けそうな大学の就職先を見ても聞いたことない会社ばかりで、行く意味あるのかなぁと思ってしまいます。無駄に4年老けますし学費ももったいない。高卒で終わったほうがいいような気もしますが実際のところどうでしょう?

Aベストアンサー

同じことを何度も書くのですが、採用資格に大卒が付いているものは結構多いのです。特に公務員は厳しい。だからなんとか這ってでも卒業出来る大学なら行った方が良いでしょう。でも遊び回って最低でも留年を繰り返し始めたら切ると約束したらどうでしょう。

QPHPで2次元配列を1次元配列にしたいのですが、わからないので教えてく

PHPで2次元配列を1次元配列にしたいのですが、わからないので教えてください。
例えば2次元配列を以下のようにします。
$ss[0][0]=a
$ss[0][1]=b
$ss[0][2]=c
$ss[1][0]=あ
$ss[2][0]=い
$ss[3][0]=う

これを以下のような1次元配列にしたいです。、
$ss[0][0]→$g[0],$ss[0][1]→$g[1],$ss[0][2]=$g[2]
$ss[1][0]→$h[0],$ss[2][0]→$h[1],$ss[3][0]=$h[2]


よろしくお願いします。

Aベストアンサー

for ($i=0; $i<3; $i++) {
$g[$i] = $ss[0][$i];
$h[$i] = $ss[$i+1][0];
}

Q【日本語】「学があっても教が無ければ意味がない」という日本語はおかしいですか? 大学に行っても優しさ

【日本語】「学があっても教が無ければ意味がない」という日本語はおかしいですか?

大学に行っても優しさ仁愛が無ければ学の意味もなさないっていう意味として言いたいです。

Aベストアンサー

日本では学と教は似たような意味で使われると思います。
教は優しさや仁愛の意味にはならないと思います。
下記のような言葉はありますね。

論語(孔子)の名言集
学びて思わざれば、すなわちくらし、思いて学ばざれば、すなわちあやうし。

<意味>
本を読みあさるだけで自分の思慮を怠ると、 物事の道理が身につかず何の役にも立たない。
逆に思いを巡らすのみで本を読んで学ばなければ、 独断的になり危険だ。
http://earth-words.org/archives/2868

あるいは
https://systemincome.com/7787
人に幸せになってもらいたいと思うなら、思いやりを学びなさい。自分が幸せになりたいと思うなら、思いやりを学びなさい。
ダライ・ラマ14世

他にも
https://matome.naver.jp/odai/2136819783259619101
人にして信なくんばその可なるを知らず。『論語』
どれほど頭が良く優秀な人材であろうとも、人に信用されず、人を信用することもできぬ人物を誰が相手にするだろうか。肝心なことを取り違えてはいけない。

日本では学と教は似たような意味で使われると思います。
教は優しさや仁愛の意味にはならないと思います。
下記のような言葉はありますね。

論語(孔子)の名言集
学びて思わざれば、すなわちくらし、思いて学ばざれば、すなわちあやうし。

<意味>
本を読みあさるだけで自分の思慮を怠ると、 物事の道理が身につかず何の役にも立たない。
逆に思いを巡らすのみで本を読んで学ばなければ、 独断的になり危険だ。
http://earth-words.org/archives/2868

あるいは
https://systemincome.com/7787
人に幸せになって...続きを読む

QPHP 連想( 2~多次元 )配列の向き変換

こんにちは

$associative_multi_d_array = array('a'=>array('a'=>1,'b'=2),'b'=>array('a'=>1,'b'=2),'c'=>array('a'=>1,'b'=2));

変換処理

$associative_multi_d_array = array('a'=>array('a'=>1,'b'=>1,'c'=>1),'b'=>array('a'=>2,'b'=>2,'c'=>2));

連想( 2~多次元 )配列の向きを上記のように変更するfunctionをPHPで書いてください。
※各階層ごと出てくる用素数は同じです。

Aベストアンサー

>各階層ごと出てくる用素数

数が同じでも要素が違うとかなり散らかった感じになるので注意
あとは単純に二重でforeachしてやれば?

<?PHP
$associative_multi_d_array = array('a'=>array('a'=>1,'b'=>2),'b'=>array('a'=>1,'b'=>2),'c'=>array('a'=>1,'b'=>2));
$temp=array();
foreach($associative_multi_d_array as $key1 => $array){
foreach($array as $key2 => $val){
$temp[$key2][$key1]=$val;
}
}
$associative_multi_d_array=$temp;
print_r($associative_multi_d_array);


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報