我认为我想要的是一个递归函数,但请让我知道是否有另一种方式来实现我想要做的!我不确定我会很好地解释这一点,所以如果您需要进一步澄清,请告诉我。建立一个递归函数来创建一个多维数组
我有一个功能,findSeed(),它有一个id,并返回一个包含 “种子” 信息的数组:
function findSeeds($id) {
global $wpdb;
$query = "SELECT * FROM seedTable WHERE id = " . $id;
$seed = $wpdb->get_row($query, ARRAY_A);
return $seed;
}
它返回下面的数组:
Array
(
[id] => 9
[name] => Sign
[seed1] => 4
[seed2] => 3
)
种子1和种子2是创建种子所需种子的ID。我正在寻找一个函数来创建一个多维数组,其格式如下,其中数组的第一部分包含第一个“seed”,下一个包含第一个包含的两个种子,下一个包含两个包含种子在每个那些,等等:
Array
(
[1] => Array
(
[0] => Stripey Wallpaper
)
[2] => Array
(
[0] => Green Block
[1] => Aqua Block
)
[3] => Array
(
[0] => Bricks
[1] => Grass
[2] => Bricks
[3] => Glass Pane
)
[4] => Array
(
[0] => Rock
[1] => Grass
[2] => Dirt
[3] => Rock
[4] => Rock
[5] => Grass
[6] => Rock
[7] => Lava
)
)
我有(可怕的)功能,如下所示做,到目前为止,但“地图”可能是2个8行之间的任何东西,我挣扎,看看如何把它变成了什么工作的一个整洁的小功能:
function makeMap($id) {
// First Row
$rowNum = 1;
$oneSeed = findSeeds($id);
$map[$rowNum][] = $oneSeed[name];
// Second Row
$rowNum = $rowNum + 1;
$twoSeed = findSeeds($oneSeed[seed1]);
$threeSeed = findSeeds($oneSeed[seed2]);
$map[$rowNum][] = $twoSeed[name];
$map[$rowNum][] = $threeSeed[name];
// Third Row
$rowNum = $rowNum + 1;
$fourSeed = findSeeds($twoSeed[seed1]);
$fiveSeed = findSeeds($twoSeed[seed2]);
$sixSeed = findSeeds($threeSeed[seed1]);
$sevenSeed = findSeeds($threeSeed[seed2]);
$map[$rowNum][] = $fourSeed[name];
$map[$rowNum][] = $fiveSeed[name];
$map[$rowNum][] = $sixSeed[name];
$map[$rowNum][] = $sevenSeed[name];
// Fourth Row
$rowNum = $rowNum + 1;
$eightSeed = findSeeds($fourSeed[seed1]);
$nineSeed = findSeeds($fourSeed[seed2]);
$tenSeed = findSeeds($fiveSeed[seed1]);
$elevenSeed = findSeeds($fiveSeed[seed2]);
$twelveSeed = findSeeds($sixSeed[seed1]);
$thirteenSeed = findSeeds($sixSeed[seed2]);
$fourteenSeed = findSeeds($sevenSeed[seed1]);
$fifteenSeed = findSeeds($sevenSeed[seed2]);
$map[$rowNum][] = $eightSeed[name];
$map[$rowNum][] = $nineSeed[name];
$map[$rowNum][] = $tenSeed[name];
$map[$rowNum][] = $elevenSeed[name];
$map[$rowNum][] = $twelveSeed[name];
$map[$rowNum][] = $thirteenSeed[name];
$map[$rowNum][] = $fourteenSeed[name];
$map[$rowNum][] = $fifteenSeed[name];
return $map;
}
当所有的“行”的节点是空白的它应该停止,所以下面只需要ŧ O返回两个率先“行”:
Array
(
[1] => Array
(
[0] => Wood Block
)
[2] => Array
(
[0] => Dirt
[1] => Lava
)
[3] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
)
[4] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] =>
)
)
任何提示,提示或解决方案将不胜感激,
谢谢。
编辑:快速记录为什么我喜欢它在上面的格式 - 然后我打印出结果在表中,第一个种子跨越整个行,然后分解下面的孩子,像这样:
$map = makeMap($_POST['theItem']);
$colspan = count(end(array_values($map)));
echo '<h3>' . $map[row1][0] . '</h3><br/>';
echo '<table>';
foreach ($map as $row) {
echo '<tr>';
foreach ($row as $cell) {
echo '<td colspan="'. $colspan .'"><div class="seed">' . $cell . '</div></td>';
}
$colspan = $colspan/2;
echo '</tr>';
}
echo '</table>';
你也许可以尝试改变数组的格式为' id =>数组(**种子)'。看起来更安全,更容易处理。 – Amelia
谢谢,但理想情况下,我想保持这种格式(我将在一秒内为上述原因添加进一步的解释!)。 –