获取php中数组项的位置

时间:2012-05-10 18:32:01

标签: php arrays

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

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

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

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

不确定我是否可以在foreach循环中使用key?

4 个答案:

答案 0 :(得分:1)

array_search(key($sidebar), array_keys($sidebar));
嗯......不漂亮。使用for循环? :P

答案 1 :(得分:0)

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

foreach ($sidebar as $single) {}

对于count数组元素,只需使用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>";
            };
        }
    }
}

答案 2 :(得分:0)

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

答案 3 :(得分: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>";
        }
    }
}

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

祝你好运。