很抱歉,如果其他地方存在解决方案,但我找不到解决方案。
我有以下数组:
$data = array(
array('a', 'b', 'c'),
array('e', 'f', 'g'),
array('w', 'x', 'y', 'z'),
);
我正在努力编写一个能够提供如下数组的函数:
a
e
w
x
y
z
f
w
x
y
z
g
w
x
y
z
b
e
w
x
y
z
f
w
x
y
z
g
w
x
y
z
c
e
w
x
y
z
f
w
x
y
z
g
w
x
y
z
这里的主要问题是源数组的数量及其长度始终在变化。因此,函数应该能够处理给它的任何数据。
我试图想出这样的东西:
function testfunc($data){
$arrayDepth = count($data);
foreach($data as $key=>$d){
foreach($d as $e){
echo $e . "\n";
if($key < $arrayDepth){
array_shift($data);
testfunc($data);
}
}
}
}
我得到的输出是:
a
e
w
x
y
z
f
g
w
x
y
z
b
w
x
y
z
c
e
f
g
w
x
y
z
我被困了将近一天没有适当的解决方案。任何帮助都会很棒!谢谢!
答案 0 :(得分:1)
Recursion [Wikipedia]是你的朋友:
function product($arrays) {
if(count($arrays) === 1) {
return $arrays[0];
}
else {
$result = array();
foreach($arrays[0] as $value) {
$result[$value] = product(array_slice($arrays, 1));
}
return $result;
}
}
答案 1 :(得分:1)
非递归版本。这应该跑得快!
$result = end($data);
if ($result === false)
{
return false; // or Array or what makes sense for an empty array.
}
$higherArr = prev($data);
while ($higherArr !== false)
{
// Set the orignal array to be the one that you built previously.
$orig = $result;
$result = array();
foreach ($higherArr as $higherKey)
{
$result[$higherKey] = $orig;
}
$higherArr = prev($data);
}
echo 'Finished with: ' . var_export($result, true);