throws Throwable
  public Value array_map(Env env, Callback fun,                         ArrayValue arg, Value []args)    throws Throwable  {    // quercus/1730    Iterator<Map.Entry<Value, Value>> argIter = arg.entrySet().iterator();    Iterator []iters = new Iterator[args.length];    for (int i = 0; i < args.length; i++) {      if (! (args[i] instanceof ArrayValue))        throw env.errorException(L.l("expected array"));      ArrayValue argArray = (ArrayValue) args[i];      iters[i] = argArray.values().iterator();    }    ArrayValue resultArray = new ArrayValueImpl();    Value []param = new Value[args.length + 1];    while (argIter.hasNext()) {      Map.Entry<Value, Value> entry = argIter.next();      param[0] = entry.getValue();      for (int i = 0; i < iters.length; i++) {        param[i + 1] = (Value) iters[i].next();        if (param[i + 1] == null)          param[i + 1] = NullValue.NULL;      }      resultArray.put(entry.getKey(), fun.eval(env, param));    }    return resultArray;  }