web関連
【php】配列の中の値をごにょごにょする関数
配列の中身を合計したり、配列の中身の最も高い値を出力する時にforeachで回さなくても関数があるじゃんって気づいたので備忘録
配列の中の値の合計を求める方法
array_sum()
を使えば配列の値の合計を求めることができる
$nums = array(1,5,8);
// 関数あり
echo array_sum($nums);// 14
// 関数なし
$total = 0;// 合計値入れる変数
foreach ($nums as $num) {
$total += $num;
}
echo $total;// 14
ってな感じで配列の合計を出力できる
文字列が入っていた時は文字列は無視される、けど数値はちゃんと加算される
$nums = array(1,5,8,'テキスト','14');
echo array_sum($nums);// 28
関数を使わないと怠いわ
連想配列の時の特定のキーの値の合計を求める方法
連想配列の時はarray_column()
で特定のキーのカラムを取得して合算する必要がある
$characters = array(
array('name' => '田中', 'age' => 15),
array('name' => '佐藤', 'age' => 32),
array('name' => '鈴木', 'age' => 23)
);
// 関数あり
$age = array_sum(array_column($characters,'age'));
echo "3人合わせて{$age}歳!";// 3人合わせて70歳!
// 関数なし
$total = 0;// 合計値入れる変数
foreach ($characters as $character) {
$total += $character['age'];
}
echo "3人合わせて{$total}歳!";// 3人合わせて70歳!
配列内の最も高い値を求める方法
max()
を使えば配列内の最大値を出力できる
$nums = array(1,5,8);
// 関数あり
echo max($nums);// 8
// 関数なし
$max = 0;// 最大値を入れる変数
foreach ($nums as $num) {
if($max < $num){
$max = $num;
}
}
echo $max;// 8
連想配列内の特定のキーで値が最大の値を求める方法
さっき使った、カラムを取得できるarray_column()
を使いまーす
$characters = array(
array('name' => '田中', 'age' => 15),
array('name' => '佐藤', 'age' => 32),
array('name' => '鈴木', 'age' => 23)
);
// 関数あり
$age = max(array_column($characters,'age'));
echo "一番高い年齢は{$age}歳!";// 一番高い年齢は32歳!
// 関数なし
$max = 0;// 最大値を入れる変数
foreach ($characters as $character) {
$age = $character['age'];
if($max < $age){
$max = $age;
}
}
echo "一番高い年齢は{$max}歳!";// 一番高い年齢は32歳!
一応ざっくりした使い方としては以上
で、気になったんだよね
一番高い年齢を求めて、その値から隣のname
キーの値を引っ張ってこれないかな?って…
で、実際にやってみた
最も高い値の配列内の別のキーを見に行く方法
最も高い値を見つけて、その値が入ってる連想配列の別のキーの値って簡単に出力できないのかな?って思ったので試してみた
※ちなみに同じ値(年齢)が二つあることは想定していない
$characters = array(
array('name' => '田中', 'age' => 15),
array('name' => '佐藤', 'age' => 32),
array('name' => '鈴木', 'age' => 23)
);
$age = max(array_column($characters,'age'));
$index = array_search($age, array_column($characters,'age'));
$name = $characters[$index]['name'];
echo "一番年上は{$name}で{$age}歳!";// 一番年上は佐藤で32歳!
一度、キー「age」の最も高い数値を取得して、その数値が連想配列の何番目に入ってるかarray_search()
を使って検索して、そのインデックス番号を元にキー「name」の名前を取得してる
なんかややこしくなったけど、普通にforeach使った方が早いね
$characters = array(
array('name' => '田中', 'age' => 15),
array('name' => '佐藤', 'age' => 32),
array('name' => '鈴木', 'age' => 23)
);
$max = 0;// 最大値を入れる変数
foreach ($characters as $character) {
$age = $character['age'];
if($max < $age){
$max = $age;
$name = $character['name'];
}
}
echo "一番年上は{$name}で{$max}歳!";// 一番高い年齢は32歳!
もっといい方法があったら誰か教えてくれー
関数でやったりforeachで回しちゃった方が良かったりケースバイケースっすね
まぁ、関数の勉強になるから個人的にはよかったけど