PHPでList::MoreUtilsのやつ
何番煎じかわからないけど、
Perlのuniq()とmesh()をPHPで考えてみた。
<?php function are_arrays() { $args = func_get_args(); foreach ($args as $arg) { if (!is_array($arg)) { return false; } } return true; } function uniq($ary1, $ary2, $ary3 = array(), $ary4 = array()) { if (are_arrays($ary1, $ary2, $ary3, $ary4)) { return array_unique(array_merge($ary1, $ary2, $ary3, $ary4)); } } function mesh($ary1, $ary2) { if (are_arrays($ary1, $ary2)) { $cnt1 = count($ary1); $cnt2 = count($ary2); // $cnt = $cnt1 > $cnt2 ? $cnt1 : $cnt2; $cnt = 0; if ($cnt1 >= $cnt2) { $cnt = $cnt1; for ($i = $cnt2; $i < $cnt; $i++) { $ary2[] = null; } } elseif ($cnt1 < $cnt2) { $cnt = $cnt2; for ($i = $cnt1; $i < $cnt; $i++) { $ary1[] = null; } } $r = array(); for ($i = 0; $i < $cnt; $i++) { $r[] = is_null($ary1[$i]) ? null : $ary1[$i]; $r[] = is_null($ary2[$i]) ? null : $ary2[$i]; } return $r; } } ?>
初めて作ってみた。
mesh()で配列の末尾以降の要素を取得しようとしたら毎回、
PHP Notice: Undefined offset...
が出てしょうがないので、仕方なく一度nullを入れて対応してみた。
もう少し短く書きたくなるのはPerlerだからかな。