web関連

【PHP】foreachの使い方(個人的備忘録)

2020/10/01

foreachで配列や連想配列での書き方を詳しく調べたことがなかったから調べた時の備忘録

foreachの基本的な使い方

基本的な書き方としては

foreach (配列 as 値変数) { … }

foreach (連想配列 as キー変数 => 値変数) { … }

という書き方で、出力方法としては

【配列】
$animalArray = array('犬','猫','豚');

foreach ($animalArray as $value) {
	echo "これは{$value}です<br>";
}
// 【出力結果】
// これは犬です
// これは猫です
// これは豚です

【連想配列】
$animalArray = array('犬' => 3, '猫' => 5, '豚' => 7);

// この下にforeach文を書いてください
foreach($animalArray as $key =>$value ){
	echo "{$key}は{$value}匹です<br>";
}
// 【出力結果】
// 犬は3匹です
// 猫は5匹です
// 豚は7匹です

配列の時にキー変数 => 値変数を使うとキー変数の部分はインデックス番号になるみたい

{$value}という書き方は、「変数展開」だということを明示的にするため
知ったばかりの技術なんで使いたくて使った

連想配列で「キー変数」を省略した書き方

個人的本題
キー変数の部分が省略が可能らしいんだけど、省略した時の連想配列の出力ってどうなるのかが気になった

$animalArray = array('犬' => 3, '猫' => 5, '豚' => 7);

foreach ($animalArray as $value) {
	echo "{$value}匹です<br>";
}
// 【出力結果】
// 3匹です
// 5匹です
// 7匹です

連想配列でキー変数 => 値変数の形を取らない時は、連想配列の値のみが出力されるみたい

逆に「キー」だけを取得したいって時はarray_keys()を使えばいいみたい

array_keys($animalArray);
// array(3) { [0]=> string(3) "犬" [1]=> string(3) "猫" [2]=> string(3) "豚" }

以上

おまけ:連想配列でforeach (配列 as 値変数) { … }の使用例

調べてたら連想配列の値を書き換えることがよくあるのかな?
「参照渡し」というので使ってた

$array = ['key1' => 'val1' , 'key2' => 'val2'];
foreach ($array as &$value) {
    $value = $value . '書き換えた';
}
var_dump($array);

&を使うと参照渡しで、使わないと値渡しっていうみたい