0

私はこのような配列を持っています:

$arr = array(array('1', '0', 'nokia'),
             array('2', '0', 'samsung'),
             array('3', '1', 'n90'),
             array('4', '2', 'galaxy note'),
             array('5', '2', 'galaxy nexus'),
             array('6', '3', '8GB'),
             array('7', '3', '16GB'),
             array('8', '4', '8GB'),
             array('9', '4', '16GB'),
             array('10', '4', '32GB'),
             array('11', '10', 'black'),
             array('12', '10', 'red'),
             );

それをこのhtmlコードに変更する関数が必要です:

<ul>
   <li id="1">nokia
      <ul>
         <li id="3">n90
            <ul>
               <li id="6">8GB</li>
               <li id="7">16GB</li>
            </ul>
         </li>
      </ul>
   </li>
   <li id="2">samsung
      <ul>
         <li id="4">galaxy note
            <ul>
               <li id="8">8GB</li>
               <li id="9">16GB</li>
               <li id="10">32GB
                  <ul>
                     <li id="11">black</li>
                     <li id="12">red</li>
                  </ul>
               </li>
            </ul>
         </li>
         <li id="5">galaxy nexus</li>
      </ul>
   </li>
</ul>
4

3 に答える 3

1

この質問には現実的な答えはありません。しかし、私は解決策を得ました。これには、ネストされた foreach を使用する必要があります。配列要素の比較。これを行うためのより簡単な方法があるかもしれません。これは私の私の解決策ですが

<?
$arr = array(array('1', '0', 'nokia'),
             array('2', '0', 'samsung'),
             array('3', '1', 'n90'),
             array('4', '2', 'galaxy note'),
             array('5', '2', 'galaxy nexus'),
             array('6', '3', '8GB'),
             array('7', '3', '16GB'),
             array('8', '4', '8GB'),
             array('9', '4', '16GB'),
             array('10', '4', '32GB'),
             array('11', '10', 'black'),
             array('12', '10', 'red'),
             );
echo "<ul>\n";
foreach($arr as $ar){
    if($ar[1]==0){
        echo "<li id=\"".$ar[0]."\">".$ar[2]."\n";
            echo "<ul>";
                foreach($arr as $ar1){
                    if($ar1[1]==$ar[0]){
                        echo "<li id=\"".$ar1[0]."\">".$ar1[2]."</li>\n";
                        echo "<ul>";
                        foreach($arr as $ar2){
                            if($ar2[1]==$ar1[0]){
                                echo "<li id=\"".$ar2[0]."\">".$ar2[2]."</li>\n";                               
                                echo "<ul>";
                                foreach($arr as $ar3){
                                    if($ar3[1]==$ar2[0]){
                                        echo "<li id=\"".$ar3[0]."\">".$ar3[2]."</li>\n";
                                    }
                                }
                                echo "</ul>";
                            }
                        }
                        echo "</ul>";
                    }
                }
            echo "</ul>";
        echo "</li>";
    }
}
echo "</ul>\n";
?>
于 2012-06-24T07:21:18.803 に答える
1

私はPHP DOMDocumentでそれを解決しました

次の構造を持つテーブルでも役立ちます: id、parent_id、title[、その他のフィールド]

$dom = new DOMDocument;
foreach($arr as $row){
    $node[$row[0]] = $dom->createElement('li'); // make an element
    $node[$row[0]]->setAttribute('id', $row[0]); // set id to element
    $node[$row[0]]->nodeValue = $row[2]; // set the value to element
    if(!$row[1])
        $dom->appendChild($node[$row[0]]); // append the element to dom document root
    else
        $node[$row[1]]->appendChild($node[$row[0]]); // append the element to that's parent element
    $ul = $dom->createElement('ul');
    $node[$row[0]] = $node[$row[0]]->appendChild($ul);
}

$string = '<ul>'.str_replace('<ul></ul>', '', $dom->saveHTML()).'</ul>'; // delete empty ul's
echo $string;
于 2012-06-24T07:28:37.557 に答える
1

配列には、適切な関数を構築できるパターンがありません。

すなわち(私が推測できることから)
array('1', '0', 'nokia') stores in it ('id_number', 'number', 'company name')
array('11', '10', 'black') stores ('id_number', 'number', 'colour')

「nokia」と「n90」をリンクさせるものもありません。必要なものを分離する必要があります。データベース (mysql) を使用するか、配列に適切なセットを作成します。

データベースを使用し、フィルター、結合などを使用するのが最善です。
それでも配列が必要な場合は、いくつかの関係を作成することができます。

これは私の意見です
アレイを 4 つのアレイに分割します

  1. company = array( array('company_id', 'company_name'))
  2. handset = array( array('phone_id','company_id', array('color_ids'), 'phone_name')
  3. color = array( array('color_id', 'color_name'))
  4. size = array( array('size_id', 'size_val')

私が行ったことは、データベース設計を配列に実装することです。これで、互いにリンクする何かができました。

これは疑似コードです。ワークフローに基づいて実際のコードを導き出すことができます

foreach(element in company)
{
 foreach(element in nested-array-of-company-element)
  {
   echo "<li id='company_id'>'company_name'</li>"
   echo "<ul>"

   foreach(elements in handset)
   foreach(elements in elements-of-handset)
   if( inarray(company_id) )
    { 
    echo "<li id='phone_id'>phone_name</li>"
    echo "<ul>"
    foreach(elements in color)
     foreach(elements in elements-of-color)
     if( inarray(color_id-in-handset-array) )
     {
     echo "<li id='color_id'>color_name</li>"
     echo "<ul>"
     }
    echo "</ul>"
    echo "<ul>"
    foreach(elements in size)
     foreach(elements in elements-of-size)
     if( inarray(size_id-in-handset-array) )
     {
     echo "<li id='size_id'>size_val</li>"
     echo "<ul>"
     }
echo "</ul>"
}
}
}

サマーリーでは、次のものが必要です:-

PHPでの foreach() のネストについて学ぶ PHP で のin_array()について学ぶ
これ は ワークフロー になり ます。

company
handset
color
size

于 2012-06-24T08:39:45.563 に答える