webコンテンツを徹底強化!WordPressサイト制作とプラグイン&テーマ情報・メンテ/エラー対応から、PHP/CSS/javascript、動画・音・イラスト等制作まで扱うコラム
マルチメディアコンテンツ制作読んどけ☆コラム

【PHP】カウントダウン機能に使える?array_reverseで配列要素を逆に,パラメーター挙動&array_flipとの違い

      2021/02/23

今回は、管理人がYouTubeData APIの、order=desc/ascが無いパラメータの場合でも、再生回数カウントダウンを作ろうとして、PHPで配列要素の順番を逆転というのをやってみたので、その様子をお伝えします。API自体は読み込みオーバーで失敗しましたが、PHPの関数array_reverseなどについて、挙動を見ていってみましょう。♪

array_reverseとは?なんか似てるarray_flipとの挙動の違いは?

PHP(対応バージョン4,5,7,8)に用意されている関数で、英単語の意味の通り、『配列の要素を逆並びにする』というものです。使い方は配列が入っている変数を渡せばok。パラメーターには、数値のキーを保持するかどうかという『preserve_keys(bool型・true/false)』があります。 また、似たような関数だけど挙動が違うarray_flip(配列のキーと値を反転)というのもあります。文字列や数値が混合している配列などだとややこしくなるので、上記のパラメーターと共に押さえておくと良いでしょう。

PHP・array_reverse、preserve_keysパラメータあり/無し挙動を確認

array_reverse、preserve_keys無し(またはfalse)

まずは、通常の配列を作っておきます。キー[0]が数値0とか1だとややこしいので、映画かなんかのキャラ名にしましょうか。 最初の要素キー[0]の場合、値は『グルーベルさん』というような配列です。その下はこれをarray_reverseしたものです。preserve_keysパラメータは与えていませんが、この状態はfalseと判定されます。 パラメータ無しのarray_reverseの場合は、出力がこんな形になりました。最初の要素キー[0]の値が、リーゼロッテさんになりましたね。『キー/値関係』もかわっており、上でキー[0]を『print_r($arr1[0]);』で出すとグルーベルさんが出ますが、下で『print_r($reversed[0]);』すると、リーゼロッテさんが出てきます。

array_reverse、preserve_keys(数値のキーを保持)がtrueの場合

次に、array_reverseにpreserve_keysパラメーターtrueを指定してみましょう。こんな感じでtrue/falseを指定。 この場合は、『キー/値関係』は保持したまま並び替えがされます。この状態だとリバース状態を『print_r($reversed[0]);』しても、値は『グルーベルさん』が出てくるようになります。管理人はまだ当たったことがありませんが(または忘れているだけ?)、キー/値関係が固定されていないと、意図しない結果になることもあります。

おまけ・array_flip で 配列のキーと値を反転するとどうなる?

おまけで、名前が似ているけど挙動が違うarray_flipを使ってみましょう。コードの書き方はだいたい一緒。ただしPHPマニュアルを確認したところ、値保持みたいなパラメータがなく、元の配列に同じ値が複数ある場合、反転してキーになったときカットされるみたいな挙動も(注意)。 上の例では人名が値だったのに、array_flipかけると、人名がキーになってしまいました。この状態で『print_r($flipped[0]);』とかやっちゃうと、『Undefined offsetエラー』になって何も出ません。キーがかわっちゃっているので、キー[0]を指定しても、なにもないからです。

管理人がPHPのarray_reverseでやろうとしてたこと→YouTubeData API・Searchリソースにorder=desc/ascがないからカウントダウンに

で、なぜarray_reverseしようかと思っていたかというと、『YouTubeData APIでカウントダウン(リストの再生回数が少ないほうから表示していく)』をやりたかったからです。 というのも、Search: listリソースで指定できるパラメーターにorder viewCount(リソースを再生回数の多い順に並べる)というのはあるけど、『10件取ったら再生回数の多いほうから10件表示』みたいな感じになり、カウントダウンTVみたいに『リスト10件の中で、再生回数が少ないほうから』とならないからです。 データベースのクエリとか、WordPressの並び替えだとorder=desc/ascが使えるんですが、なにか配列操作が必要という感じでした。あと、array_reverseする配列を『$videoarr["items"]』みたいにキーしている理由についてですが、$videoarrを直接渡すと、itemsの並び替えが行われないからです(多次元配列の中身まではリバースしない)。 これについては、urlパラメータなどで指定など、良い方法・良いコードがほかにあるかもしれませんので調査・学習します。

あとがき・まとめ

  • array_reverseは要素を逆順にした配列に、array_fliは配列のキーと値を逆転
  • array_reverseにpreserve_keysパラメーターtrueだと、『キー/値関係』が保持できる
  • array_flipでは元の配列に同じ値が複数ある点や、キー指定出力がある場合などは注意
  • array_reverseでは多次元配列の中身まではリバースしない
まとめるとこんなところでした。現在SSF(著作権フリー曲素材サイト)ように、カウントダウン表示用の機能を作っていてこのファンクションを使っています。挙動やパラメータなどに気をつけつつ使っていきたいと思います。

【カテゴリ】 - PHP・データベースetc
【タグ】 - ,

  関連記事

【WordPressで覚えよう】PHP「->」(オブジェクト演算子/アロー演算子)・「=>」(ダブルアロー演算子)の違い

今回は、管理人もPHP学習し始めのときは混同していた、PHPの演 ...

【超危険】WordPressデータベースリビジョンお掃除

今回は、WordPressのリビジョンが、データベースに大量にた ...

YouTube Data APIを使って、PHPで『タイトル・動画id・サムネイル画像』などを取得してみる(Search: listリソース)

今回は、youtubeとwebサイト連携で、YouTube Da ...

テスト環境(ローカル含む)でPHPサイト開発に使えるツール&xamppでやってみた例(設定や表示ファイルetc)

今回は、管理人がサイトに、ちょっとした機能を実装しようとしていた ...

WordPress一覧表示で、特定のカテゴリ/投稿を表示しないようにするには?→category_not_in・post_not_inで

今回は、WordPressの公式フォーラムを見ていたら、『一覧か ...

WordPress・REST APIのjsonファイルにカスタムフィールドを入れ、タイトル・アイキャッチと共に外部サイトで取得・表示

今回は、管理人がWPで作ったサイトのコンテンツを、別の自社運営サ ...

【WordPress条件分岐】is_singleとis_singularって違うの?→idやスラッグ指定、投稿タイプ指定の面で違いが

今回は、WPの条件分岐などに使うファンクションで、名前が超似てい ...