【问题标题】:Iterate through known number of elements in array and get the key PHP遍历数组中已知数量的元素并获取关键 PHP
【发布时间】:2012-09-16 13:36:14
【问题描述】:

我有一个网站,我正在使用 php 从数组中打印键和值

$array = array(
    "gfo"   => "Fondant",
    "gdo"   => "Domino",
    "ges"   => "Espir",
    "gam"   => "Amara",
    "gsa"   => "Sandwich",
    "gme"   => "Merme",
    "cza"   => "Zarza",
    "cor"   => "Oreo",
    "cal"   => "Almen",
    "cca"   => "eche",
    "cch"   => "Chocolate"
);

但我只想在菜单中显示前 6 个元素,例如

<li>
<a href="product1.php" style="padding:8px 30px;">Product 1</a>
  <ul>                
     <?php foreach($array as $key=>$val):?>
    <li><a href="http://www.site.com.mx/products.php?id=<?=$key?>"><?=$val?></a></li>
     <?php endforeach;?>
  </ul>
</li>

然后是其他菜单中的其他 5 个元素

<li>
<a href="product2.php" style="padding:8px 30px;">Product 2</a>
  <ul>                
     <?php foreach($array as $key=>$val):?>
    <li><a href="http://www.site.com.mx/products.php?id=<?=$key?>"><?=$val?></a></li>
     <?php endforeach;?>
  </ul>
</li>

我知道我可以使用

for ($i = 1; $i <= 6; $i++) {
    echo $i;
}

for ($i = 6; $i <= sizeof($array); $i++) {
    echo $i;
}

但是如何在两个 for 循环中获取键和值呢?

【问题讨论】:

  • array_slice() 是一种方式
  • 我打算这样做,但是 array_slice 不保留关联数组键。
  • @jeffp 仅当它们是数字时(它们不在这里),并且仅当您不使用标志 preserve_keys (5.0.2+)

标签: php arrays for-loop


【解决方案1】:

您可以使用array_chunk 将数组拆分为两个单独的块,然后对每个块进行迭代:

$chunked = array_chunk($array, 6);

【讨论】:

    【解决方案2】:

    试试 slice()

    $first_array = slice_array($array,0,6);
    $second_array = slice_array($array,6,10);
    

    然后做你的,你也可以用

    $first_array = array_chunk($array,6);
    $second_array = array_chunk($array,6,10);
    

    【讨论】:

      【解决方案3】:

      您可以为此使用each

      $i = 1; reset($array);
      // get the first 6
      while ($i <= 6 && list($key, $val) = each($array)) {
              echo "$key = $val\n";
              ++$i;
      }
      
      // get the rest    
      while (list($key, $val) = each($array)) {
              echo "$key = $val\n";
      }
      

      或者,您可以使用array_slice(),但请确保保留密钥:

      $first_six = array_slice($array, 0, 6, true);
      $rest = array_slice($array, 6, null, true);
      

      【讨论】:

        【解决方案4】:

        使用 array_keys() 和 array_values() 函数

        $array = array(
            "gfo"   => "Fondant",
            "gdo"   => "Domino",
            "ges"   => "Espir",
            "gam"   => "Amara",
            "gsa"   => "Sandwich",
            "gme"   => "Merme",
            "cza"   => "Zarza",
            "cor"   => "Oreo",
            "cal"   => "Almen",
            "cca"   => "eche",
            "cch"   => "Chocolate"
        );
        $keys = array_keys($array);
        $values = array_values($array);
        
        for ($i = 0; $i < 6; $i++) {
            <li><a href="http://www.site.com.mx/products.php?id=<?=$keys[$i]?>"><?=$values[$i]?></a></li>
        }
        

        for ($i = 6; $i <= sizeof($array); $i++) {
            <li><a href="http://www.site.com.mx/products.php?id=<?=$keys[$i]?>"><?=$values[$i]?></a></li>
        }
        

        放入必要的打开/关闭php标签

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-11
          • 2012-01-16
          • 2019-08-22
          • 1970-01-01
          • 1970-01-01
          • 2011-06-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多