我認爲我想要的是一個遞歸函數,但請讓我知道是否有另一種方式來實現我想要做的!我不確定我會很好地解釋這一點,所以如果您需要進一步澄清,請告訴我。建立一個遞歸函數來創建一個多維數組
我有一個功能,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
謝謝,但理想情況下,我想保持這種格式(我將在一秒內爲上述原因添加進一步的解釋!)。 –