繁体   English   中英

多维PHP数组–从键中选择数据

[英]Multi-Dimensional PHP array – select data from key

不知道我是否为这个问题正确命名。 我在遍历多维php数组以构建一些HTML节点时遇到一些麻烦。 这是我要遍历的数组:

    $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 ['title'],$ location ['phone']等。我目前使用的PHP have只会遍历并回显每个单独的位置数组中的键或值。

    <?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>";

    }

    ?>

这样的事情应该起作用。 我不会为您实现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;
    }
}

使用嵌套的foreach循环并将值放入适当的位置:

<?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 } ?>

您只需要嵌套(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;?>

只需对代码进行一些调整:

<?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沙箱示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM