2016-05-25 18 views
0

この質問に正しく名前が付けられているかどうかわかりません。私はいくつかのHTMLノードを構築するために、多次元php配列をループするいくつかの問題を抱えています。ここで私はオーバーループするよ配列されています多次元PHP配列 - キーからデータを選択

$locations = array(
     'CityName' => array(
      array(
      'title' => 'Title', 
      'phone' => '(555) 555-5555', 
      'address' => '1234 Fake st.', 
      'city' => 'Ventura', 
      'state' => 'CA', 
      'zip' => '93003', 
      'url' => 'http://www.google.com/' 
     ), 
      array(
      'title' => 'Title', 
      'phone' => '(555) 555-5555', 
      'address' => '1234 Fake st.', 
      'city' => 'Ventura', 
      'state' => 'CA', 
      'zip' => '93003', 
      'url' => 'http://www.google.com/' 
     ), 
    ), 
     'CityName2' => array(
      array(
      'title' => 'Title', 
      'phone' => '(555) 555-5555', 
      'address' => '1234 Fake st.', 
      'city' => 'Ventura', 
      'state' => 'CA', 
      'zip' => '93003', 
      'url' => 'http://www.google.com/' 
     ), 
      array(
      'title' => 'Title', 
      'phone' => '(555) 555-5555', 
      'address' => '1234 Fake st.', 
      'city' => 'Ventura', 
      'state' => 'CA', 
      'zip' => '93003', 
      'url' => 'http://www.google.com/' 
     ) 
    ) 
    ); 

は私が何をしようとしているため、誤ってこの配列を構築していることに注意してください。このループのためのHTML出力は次のようになります。

<h4>CityName</h4> 
    <ul> 
     <li> 
     <p>Title</p> 
     <p>1234 Fake St.</p> 
     <p>Ventura, CA 93003</p> 
     <p>(555) 555-5555</p> 
     <p class="link"><a href="http://www.google.com/" target="_blank">Visit Website</a></p> 
     </li> 
     <li> 
     <p>Title</p> 
     <p>1234 Fake St.</p> 
     <p>Ventura, CA 93003</p> 
     <p>(555) 555-5555</p> 
     <p class="link"><a href="http://www.google.com/" target="_blank">Visit Website</a></p> 
     </li> 
    </ul> 
    <h4>CityName2</h4> 
    <ul> 
    ... 
    </ul> 

私は私がやりたいことは、私のHTMLテンプレートにプラグインするために、データの個々の部分をつかむことができるようにだと思う.. $場所[「タイトル」]のような、$ location ['phone']などです。私が現在持っているPHPはループして、個々のロケーション配列からキーや値をエコーアウトするだけです。

<?php 
    // Printing all the keys and values one by one 
    $locationNames = array_keys($locations); 

    for($i = 0; $i < count($locations); $i++) { 
     echo "<h4>" . $locationNames[$i] . "</h4>"; 
     echo "<ul>"; 

     foreach($locations[$locationNames[$i]] as $key => $value) { 

      foreach($value as $key => $value) { 
       echo $value; 
      } 

     } 

     echo "</ul>"; 

    } 

    ?> 
+0

2つの 'foreach'文 – cmorrissey

答えて

0

使用しforeachループをネストされたAMDの適切な場所にして値をドロップ:

<?php foreach ($locations as $location => $ldata) { ?> 

    <h4><?php echo $location; ?></h4> 
    <ul> 

    <?php foreach ($ldata as $attribute) { ?> 

     <li> 
     <p><?php echo $attribute['title']; ?></p> 
     <p><?php echo $attribute['address']; ?></p> 
     <p><?php echo $attribute['city'] . " ," . $attribute['state'] . " " . $attribute['zip']; ?></p> 
     <p><?php echo $attribute['phone']; ?></p> 
     <p class="link"><a href="<?php echo $attribute['url']; ?>" target="_blank">Visit Website</a></p> 
     </li> 

    <? php } ?> 

<?php } ?> 
0

このようなものは動作するはずです。私はあなたのためのHTMLを実装しませんが、それは簡単に行う必要があります。これには、内側の配列に動的キーがある場合、それらを手近に知る必要がないという利点があります。

foreach($locations as $key => $value) { 
    echo $key, PHP_EOL; 
    $data = $locations[$key]; 
    $length = count($data); 
    for($i = 0; $i < $length; $i++) { 
     $values = $data[$i]; 
     foreach($values as $key2 => $value2) 
      echo "\t", $key2, ": ", $value2, PHP_EOL; 
    } 
} 
0

は、あなただけのネストされた(foreachの)を必要とするループ:あなたへ

<?php foreach($locations as $cityname => $location):?> 

    <h4><?=$cityname?></h4> 
    <ul> 
    <?php foreach($location as $place:?> 
     <li> 
     <p><?=$place['title']?></p> 
     <p><?=$place['phone']?></p> 
     <!-- etc etc--> 
     </li> 
     <?php endforeach;?> 
    </ul> 

<?php endforeach;?> 
0

ただ、いくつかの調整をコード:

<?php 
// Printing all the keys and values one by one 
$locationNames = array_keys($locations); 

for($i = 0; $i < count($locations); $i++) { 
    echo "<h4>" . $locationNames[$i] . "</h4>"; 
    echo "<ul>"; 

    foreach($locations[$locationNames[$i]] as $key => $value) { 
     echo "<li>"; // add list open tag      <-- tweak #1 
     foreach($value as $key => $value) { 
      echo "<p>$value</p>"; // add paragraph tags   <-- tweak #2 
     } 
     echo "</li>"; // add list close tag      <-- tweak #3 
    } 

    echo "</ul>"; 

} 

?> 

PHP Sandbox example.