0

假设我有一个类似于以下的数组,并且我正在循环遍历它:

$sidebar = array("Best of the Month" => $featuredBestMonth, 
                 "Featured Content"  => $featuredContent);

<? while($item = current($sidebar)):?>
    <? if($item):?>

         <h3><?=key($sidebar);?></h3>

         <? foreach($item as $single):?>
            <p><?=$single['title'];?></p>
        <? endforeach;?>

    <? endif;?>
    <? next($sidebar);?>
<? endwhile;?>

如何计算当前数组编号,所以第一个 while 会显示 1,第二个会显示 2?

我知道我可以做到这一点,$i++;但只是想知道是否有一个数组函数可以做到这一点?

不确定我是否可以将 key 与 foreach 循环一起使用?

4

4 回答 4

1
array_search(key($sidebar), array_keys($sidebar));

嗯..不漂亮。使用for循环?:P

于 2012-05-10T18:33:49.697 回答
0

我建议您使用 foreach 来满足几乎所有的数组循环需求:

foreach ($sidebar as $single) {}

对于计数数组元素,只需使用count()

count ($sidebar);

if (is_array($sidebar))
foreach ($sidebar as $key => $single) :
?>
    <h3><?php echo $key; ?></h3>
    <p><?php echo $single['title']; ?></p>
<?
endforeach;

最终解决方案:

if (is_array($sidebar))
{
    $i = 0;
    foreach ($sidebar as $key => $item)
    {
        $i2 = ++ $i;
        echo "<h3>{$i2}.- $key</h3>\n";

        if (is_array($item))
        {
            $j = 0;
            foreach ($item as $single)
            {
                $j2 = ++ $j;
                echo "<p>{$j2}.- {$single['title']}</p>";
            };
        }
    }
}
于 2012-05-10T18:37:13.207 回答
0

我不相信有一种方法可以使用字符串索引来完成您所要求的事情(无需使用单独的计数器变量)。一个 for 循环或另一个带有计数器的循环实际上是完成您所要求的唯一方法。

于 2012-05-10T18:38:33.797 回答
0

Oi - 所有这些标签(以及短标签)看起来都很痛苦。感觉很像 PHP 4,任何被迫支持此代码的人都不会很高兴。无意冒犯,但我可以提出类似的建议:

$i = 0;

$sidebar = array(
    "Best of the Month" => $featuredBestMonth, 
    "Featured Content"  => $featuredContent
);

foreach($sidebar as $key => $item){
    if($item){   // will $item ever NOT evaluate to true?
        echo "<h3>".++$i.". $key</h3>";

        foreach($item as $single){
            echo "<p>$single[title]</p>";
        }
    }
}

我仍然不确定这段代码是否有意义,但根据您的示例,它至少应该产生相同的结果(也不确定您希望计数器显示在哪里,因为您的问题不是很清楚......所以我猜到了)。

祝你好运。

于 2012-05-10T18:59:07.390 回答