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で回しちゃった方が良かったりケースバイケースっすね
まぁ、関数の勉強になるから個人的にはよかったけど

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。