Я хочу просто найти лучший способ сделать это:
$array = array(
array('a', 'b', 'c'),
array('e', 'f', 'g'),
array('h', 'i', 'j', 'k', 'l')
);
Цель состоит в том, чтобы напечатать что-то вроде этого:
a e h
a e i
a e j
a e k
a e l
a f h
a f i
a f j
a f k
a f l
a g h
a g i
a g j
a g k
a g l
Затем сделаем то же самое для b
и c
.
В настоящее время я использую этот код:
foreach ($array[0] as $val1) {
foreach ($array[1] as $val2) {
foreach ($array[2] as $val3) {
echo "$val1 $val2 $val3 \n";
}
echo "--------\n";
}
}
Я также попытался создать выше код динамически и выполнить его с помощью eval:
$eval = '
$data =array();
';
$eval_blocks = '';
$eval_foreach = '';
$eval_data = '
$data[] = ';
$looplength = count($array);
for ($i = 0; $i < $looplength; $i++) {
$eval_foreach .= '
foreach($array[' . $i . '] as $val' . ($i + 1) . '){
';
if (($i + 1) == $looplength) {
$eval_data .= ' $val' . ($i + 1) . ';';
} else {
$eval_data .= ' $val' . ($i + 1) . ' ." ".';
}
$eval_blocks .= '
}
';
}
$eval = $eval . $eval_foreach . $eval_data . $eval_blocks;
eval($eval);
print_r($data);
Но я все еще хочу найти лучший способ сделать это, если это возможно.
Update:
Примечание: $array
является динамическим, он может содержать два под-массива или более