配列に対してin_arrayをする

こんにちわエンジニアの佐山です! 前回Riotの基礎記事を書いたにも関わらず、今回はPHPの小ネタについて書いておこうと思います。 ※ Riotはもうしばらくお待ちください...

やりたかったこと

Aという配列に格納されている値が、Bという配列に含まれていればtrueを返すというもの。

Aという配列にはaと'b'という値が格納されている。 Bにはbcこれをin_arrayを使うと以下のようになる

<?php
$A = ['a', 'b'];
$B = ['b', 'c'];

if(in_array($A[0], $B) || in_array(A[1], $B)){
    echo 'A配列の値はB配列に含まれています。';
}

しかしこれだと、論理演算子を多量に使う必要が出てしまう

in_arrayの仕様

in_arrayは以下のような文法で使用する

<?php
in_array(値, 配列);

やりたかったことは以下、

<?php
in_array(A配列, B配列);

しかし、これでは関数の仕様上エラーとなる。 第一引数には配列は設定出来ないので、エラーとなる

in_arrayを拡張した関数を作成する

<?php
function is_in_array($arr1, $arr2){
  foreach ($arr1 as $value) {
    if (in_array($value, $arr2)) {
      return true;
    }
  }

  return false;
}

上記の関数を使って再度実装をする

<?php
$A = ['a', 'b'];
$B = ['b', 'c'];
if(is_in_array($A, $B)){
    echo 'A配列の値はB配列に含まれています';
}

function is_in_array($arr1, $arr2){
  foreach ($arr1 as $value) {
    if (in_array($value, $arr2)) {
      return true;
    }
  }

  return false;
}

関数を使い回せば、色んな処理で使い回せるかと思います!