3

職場とその親IDの表があります。各親は、任意の数のレベルを持つことができます。

id    workplace              parent
1     WCHN                   0
2     Acute Services         1
3     Paediatric Medicine    2
4     Surgical Services      2
5     Nursing and Midwifery  1
6     Casual Pool            5
7     Clinical Practice      5

次のように、すべての親ワークプレースとともにワークプレースを一覧表示する単一の選択入力を作成する必要があります。

<select>
    <option>WCHN > Acute Services > Paediatric Medicine</option>
    <option>WCHN > Acute Services > Surgical Services</option>
    <option>WCHN > Nursing and Midwifery > Casual Pool</option>
    <option>WCHN > Nursing and Midwifery > Clinical Practice</option>
</select>

このソリューションを変更することで、フラットリストを多次元配列に変換し、値のペアを出力することができましたが、フルパスはありません。

<?php
public function list_all_workplaces()
{
    $temp = $result = array();
    $list = array();

    // Get the data from the DB
    $table = mysql_query("SELECT * FROM workplaces");

    // Put it into one dimensional array with the row id as the index
    while ($row = mysql_fetch_assoc($table)) {
      $temp[$row['workplace_id']] = $row;
    }

    // Loop the 1D array and create the multi-dimensional array
    for ($i = 1; isset($temp[$i]); $i++)
    {
        if ($temp[$i]['parent'] > 0)
        {
            $tmpstring = ($temp[$i]['workplace']); // workplace title

            // This row has a parent
            if (isset($temp[$temp[$i]['parent']])) {

                $list[$i] = $temp[$temp[$i]['parent']]['workplace']." > ".$tmpstring; 
                //example output: Acute Services > Paediatric Medicine

                // The parent row exists, add this row to the 'children' key of the parent
                $temp[$temp[$i]['parent']]['children'][] =& $temp[$i];

            } else {
                // The parent row doesn't exist - handle that case here
                // For the purposes of this example, we'll treat it as a root node
                $result[] =& $temp[$i];
            }
        } else {
            // This row is a root node
            $result[] =& $temp[$i];
        }

    }
    // unset the 1D array
    unset($temp);

    //Here is the result
    print_r($result);
}

print_r()出力の例:

[1] => WCHN > Acute Services
[2] => Acute Services > Paediatric Medicine

ここからどこに行って、すべての親の職場を選択オプションに入れることができますか?

4

2 に答える 2

1

戻り値がない場合、関数をどのように使用するかさえわかりません。

配列が正しく構築されていて、必要な方法で、結果を html 選択フィールドに入れることについて質問している場合、それは簡単な部分です。

すぐに関数に戻りましょう。関数に return $result がリストされていないため、呼び出されたときに何も返されません。

それを開始する関数の最後に追加する必要があります。

次に、配列をループして、html 処理を開始します。

$data = list_all_workplaces()
foreach( $data as $key => $value )
{
    $options = "<option value='{$key}'>{$value}</option>";
}
echo "<select>{$options}</select>";
于 2013-03-18T04:49:58.567 に答える
1

あなたが作成した文字列を使用したことがないため、あなたのコードがprint_rあなたが見ていると言う出力をどのように生成するかわかりません。しかし、これらの行に沿った何かがあなたをあなたの道に導くはずです-それはあなたが必要とする文字列を生成します.

forループを次のように置き換えます。

foreach ($temp as $i => $details)
{
    $parentID = $details['parent'];
    $tmpstring = ($details['workplace']);
    if ($parentID > 0 && isset($temp[$parentID]))
    {
        $temp[$parentID]['children'][] =& $temp[$i];
        while ($parentID > 0 && isset($temp[$parentID]))
        {
            $tmpstring = $temp[$parentID]['workplace']." > ".$tmpstring;
            $parentID = $temp[$parentID]['parent'];
        }
    }
    $result[] = $tmpstring;
}

@Syx が言ったように、おそらく関数からも何かを返す必要があり$result、それを使用して<select>.

于 2013-03-18T04:52:28.677 に答える