in_arrayのややこしい版
仕事で必要に駆られて書いてみました。
イメージとしては、タイトル通りin_arrayに複雑な条件を指定出来るようにしたもので、
第一引数の配列のネストレベルが深くなる毎に、and/orをトグルしながら検索していきます。
思い出しながらなので、こんなんだったかどうか微妙><
使い方
<?php /* 検索条件 */ $needles = array(1, 2, array(3, array(4, 5))); /* 検索対象を変えながらテスト */ echo in_array_ex($needles, array(1, 3, 2)); // true echo in_array_ex($needles, array(1, 4, 2)); // false echo in_array_ex($needles, array(4, 5, 1, 2)); // true ?>
ソースコード
<?php function in_array_ex(Array $needles, Array $haystack, $logical_op = 1) { if (empty($needles)) return $logical_op; $needle = array_shift($needles); $tmp; if (is_scalar($needle)) $tmp = in_array($needle, $haystack); else if (is_array($needle)) $tmp = in_array_ex($needle, $haystack, !$logical_op); else throw new Exception( 'The 1st argument must be an array of mixed in array, and scalar.' ); if ($logical_op) return $tmp && in_array_ex($needles, $haystack, $logical_op); else return $tmp || in_array_ex($needles, $haystack, $logical_op); } ?>
概要と使い道
眠いのでまた後日…><