【php】%を使った分岐の意味が分からなすぎるのは、配列が0スタートだからだった件

奇数回のループの時、偶数回のループの時、それぞれ違うclassを入れたい!

<?php echo ($k % 2 == 0) ? 'odd' : 'even' ?>

$kは、直前にforeach文で使っている($catlist as $k => $cat) この部分の$kなんですが。

それ以外のところはいったい何を言っているんでしょう……。

($k % 2 == 0) ? 'odd’ : 'even’

?とか:とかは、もし●●がtrueだったら、そうでなかったら、を表す省略形。三項演算子といいます。

【真偽値式】 ? 【真の場合に評価する式】 : 【偽の場合に評価する式】

条件演算子(三項演算子)を可読性低いとか言わせない

今回の式の場合

<?php echo ($k % 2 == 0) ? 'odd' : 'even' ?>

【真偽値式】($k % 2 == 0)

$kを2で割った時のあまりは0である

【真の場合に評価する式】’odd’

「$kを2で割った時のあまりは0である」という式が正しいとき。つまり$kが2とか、4とかのとき。

なのになんでoddなんだ!?と思うけれども。

今回に限っては$kは、この条件式の前に本当は存在しているforeach文に出てくる($catlist as $k => $cat) この部分の$kなんです。

つまり1回目の$kは0。0なんです。配列だから。

0が1回目、2は3回目。

ということで、「$kを2で割った時のあまりは0である」という式が正しいとき、表示回数は奇数。
必要なのは表示回数に即したclass名なので、oddを入れてあります。

【偽の場合に評価する式】’even’

「$kを2で割った時のあまりは0である」という式が正しくないとき。つまり$kが1とか、3とかのとき。

真の式と同じく、1回目の$kは0なので、2回目の$kが1。なので、$kが奇数の時、表示回数は偶数。

0スタートだという現実を受け入れられない

「$kを2で割った時のあまりは0である」という式が正しいとき、表示回数は奇数。
必要なのは表示回数に即したclass名なので、$kが偶数の時、入れるのはodd。

分かってしまえばおかしなことではないんですが。

何回目かを知りたくて使っている数字が、0からスタートという現実は配列というものと縁遠い生活を送っていると気づかないもので。

ずっと、絶対偶数と奇数の判定が頭おかしいと思っていたのでした……。0スタート。0スタート……。