読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

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だからかな。