У меня есть этот массив, и я использую его в качестве ВХОД:декартово произведение ассоциативного массива показывает ключ и значение - PHP
Array
(
[0] => Array
(
[11134] => 3.430
[11131] => 2.720
[11128] => 1.077
)
[1] => Array
(
[11135] => 2.381
[11132] => 2.636
[11129] => 2.920
)
[2] => Array
(
[11136] => 1.220
[11133] => 2.550
[11130] => 3.895
)
)
Мне нужно напечатать декартово произведение этого массива. Я использовал ответ, расположенный here, но мне это совсем не помогает. Я изменил функцию Джон отправил, чтобы сделать это быстрее (на самом деле просто переключился array_shift
для array_pop
поэтому он не будет индексировать массив как числовой):
function cartesian($input) {
$result = array();
while (list($key, $values) = each($input)) {
if (empty($values)) {
continue;
}
if (empty($result)) {
foreach($values as $value) {
$result[] = array($key => $value);
}
}
else {
$append = array();
foreach($result as &$product) {
$product[$key] = array_pop($values);
$copy = $product;
foreach($values as $item) {
$copy[$key] = $item;
$append[] = $copy;
}
$values[] = $product[$key];
}
$result = array_merge($result, $append);
}
}
return $result;
}
Ответ дается печатает следующий массив:
Array
(
[0] => Array
(
[0] => 3.430
[1] => 2.920
[2] => 3.895
)
[1] => Array
(
[0] => 2.720
[1] => 2.920
[2] => 3.895
)
...
)
Это не то, что я точно хочу. желаемая OUTPUT функции является:
Array
(
[0] => Array
(
[11134] => 3.430
[11129] => 2.920
[11130] => 3.895
)
[1] => Array
(
[11131] => 2.720
[11129] => 2.920
[11130] => 3.895
)
...
)
я придумал, как сделать первый элемент моего нового массива, чтобы посмотреть, как мне нужно, то часть кода выглядит следующим образом:
if (empty($result)) {
foreach($values as $key => $value) {
$result[] = array($key => $value);
}
}
Но вот где я застрял. Я не могу получить другие значения, чтобы захватить их ключи и отобразить их как ключи. Окончательный массив, который мне удалось получить, выглядит следующим образом.
Array
(
[0] => Array
(
[11134] => 3.430
[1] => 2.920
[2] => 3.895
)
[1] => Array
(
[11131] => 2.720
[1] => 2.920
[2] => 3.895
)
...
)