qq_青枣工作室_0
这玩意,还真难搞。利用PHP的动态语言特性来做。<?php
function array_cartesian_assoc(){
$args = func_get_args();
if(2 > $count=func_num_args()) return $args;
$ret=[]; $k=[]; $v=[];
$foreach = '';
for($i=0; $i<$count; $i++) $foreach.= "foreach(\$args[$i] as \$k[$i]=>\$v[$i])\n";
$foreach .= <<<'EOL'
{
$one = [];
for($j=0; $j<$count; $j++) {
$one[$k[$j]] = $v[$j];
}
$ret[] = $one;
}
EOL;
eval($foreach);
return $ret;
}
// 测试
$a = ['a'=>'a1', 'b'=>'b1'];
$b = ['c'=>'c1', 'd'=>'d1'];
$c = array_cartesian_assoc($a, $b);
var_export($c);