ここから本文です

PHPの質問です。 ●$a~$fには、"あ","い","う","え","お"の文字が 一文字ずつ...

けいさん

2019/11/909:16:04

PHPの質問です。

●$a~$fには、"あ","い","う","え","お"の文字が
一文字ずつランダムに格納されます。
●$a~$fは、0か1の決められた値を持っています。

同じ文字同士の値を足して、各文字ごとの値を表出するには
どうしたらよいでしょう?


例えば、

$aは、"い"
$bは、"え"
$cは、"い"
$dは、"あ"
$eは、"あ"
$fは、"い"

と格納されて、各値が

$a=>1
$b=>0
$c=>1
$d=>1
$e=>0
$f=>1

の場合に、

"い"は、3。($a+$c+$fなので)

"え"は、0。($bだけなので)

"あ"は、 1。($d+$eなので)

と表出したいです。

閲覧数:
10
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tezcelloさん

2019/11/910:59:50

> ●$a~$fには、"あ","い","う","え","お"の文字が
> ●$a~$fは、0か1の決められた値を持っています。
変数は、同時に別の値を持つ事が出来ません。

また、似た様な意味を別の変数にすると取り扱いが面倒になるだけなので、通常は配列に収めます。
例えば以下の様にします。
$chars = array(
'a'=>'い',
'b'=>'え',
'c'=>'い',
'd'=>'あ',
'e'=>'あ',
'f'=>'い'
);
$vals = array(
'a'=>1,
'b'=>0,
'c'=>1,
'd'=>1,
'e'=>0,
'f'=>1
);

キーを共通にしておく事で、処理が楽になります。

文字は違っても「合計する」処理は同じなので、結果も配列に収めるのが適当でしょう。
$results = array();


> 各値が
> $a=>1
上記の様に配列のキーと値を示すのに => を使うので、この様に示されると混乱の素となりそうです。


> 同じ文字同士の値を足して、各文字ごとの値を表出するには
思った事がそのままできる魔法は無いので、地道にやりたい事をプログラムする必要があります。
通常は、やりたい事を詳しく文章にしたら、それを順に PHPスクリプトに置き換えていけば大方は何とかなります。

例えば...

基になる配列の端から順に全てを処理する際は foreach() を使うのが普通です。
foreach ($chars as $k=>$c) {
}

キーも取り出す事が出来ますから、それを使って $val から各値を取り出す事が可能です。
$vals[$k]

同じ文字を判別して...という処理も出来ますが、文字毎に同じ所へ結果を残すという様にしておけば(その為に $results を用意した)判別そのものが不要です。
$results[$c] = ($results[$c] ?? 0) + $vals[$k];
__別の意味で判別はしてるけど
(参考)
https://www.php.net/manual/ja/language.operators.comparison.php#lan...

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

oni********さん

2019/11/1417:44:00

まず、質問答えはエラーです。
$aは、"い"ということは$a=’いi’;
$a=>1 =>は配列としてのの代入ですのでエラーとなります。
同じ変数名でスカラー変数と配列変数はエラーとなります。
ごっちゃになってますので整理しましょう。

$abcdef=array();//変数の宣言とか初期化

$abcdef=array('a'=>array('0'=>'い','1'=>1));
$abcdef=array('b'=>array('0'=>'え','1'=>0));
$abcdef=array('c'=>array('0'=>'い','1'=>1));
$abcdef=array('d'=>array('0'=>'あ','1'=>1));
$abcdef=array('e'=>array('0'=>'あ','1'=>0));
$abcdef=array('f'=>array('0'=>'い',1'=>1));
という二次元配列を作成

$list_abcdef=array();//変数の宣言とか初期化

forreach($abcdef as $key=>$val){

if($val[0]=='あ'){//もし配列 $val の0キーの値が’あ’ならば
$list_abcdef[0] [0]=$val [0]」;//'あ’を代入
$list_abcdef[0] [1]+= $val「1];//配列 $val の1キーの値の加算を繰り返す
}

if($val[0]=='い'){//もし配列 $val の0キーの値が’い’ならば
$list_abcdef[1] [0]=$val [0];//'い’を代入
$list_abcdef[1] [1]+= $val「1];//配列 $val の1キーの値の加算を繰り返す
}

if($val[0]=='え'){//もし配列 $val の0キーの値が’え’ならば
$list_abcdef[2] [0]=$val [0];//'え’を代入
$list_abcdef[2] [1]+= $val「1];//配列 $val の1キーの値の加算を繰り返す
}

}


var_dump($list_abcdef);

$list_abcdef
[0]
[0」'あ'
[1] 1
[1]
[0」'い'
[1] 3
[2]
[0」'え'
[1] 0
という二次元配列が得られます。


print $list_abcdef[0][0].’は'.$list_abcdef[0][1];
print $list_abcdef[1][0].’は'.$list_abcdef[1][1];
print $list_abcdef[2][0].’は'.$list_abcdef[2][1];

あは1
いは3
えは0

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる