查找foreach循环中的第一行,最后一行和第n行

时间:2016-01-11 08:09:57

标签: php arrays loops

我想知道PHP是否有一个gracefull方法来查找foreach循环中的第一行,最后一行和/或第n行。

我可以使用计数器执行以​​下操作:

$i = 0;
$last = count($array)-1;
foreach ($array as $key => $row) {
    if ($i == 0) {
        // First row
    }

    if ($i == $last) {
        // Last row
    }
    $i++;
}

但不知怎的,这感觉就像是一个肮脏的修复。任何解决方案或建议?

修改

正如评论中所建议的那样,我将count($array)移到了循环之外。

4 个答案:

答案 0 :(得分:1)

在php中,我们有当前结束函数来获取数组的第一个和最后一个值。

<?php
$transport = array('foot', 'bike', 'car', 'plane');
echo $first = current($transport); // 'foot';
echo $end = end($transport); // 'plane';
?>

修改:

不使用当前或结束或foreach循环的简单方法:

$last = count($transport) - 1;
echo "First : $transport[0]";
echo "</br>";
echo "Last : $transport[$last]";

答案 1 :(得分:1)

foreach ($array as $key => $row) {

        $index = array_search($key, array_keys($array));

        if ($index  ==  0) {
            // First row
        }

        if ($index  ==  count($array) - 1) {
            // Last row
        }
    }

答案 2 :(得分:1)

使用数组

对于数组中的第一个元素,您只需查找$array[0];即可。根据阵列光标,您还可以使用current($array);

对于数组的中间部分,您可以使用array_search()array_keys()的组合。

对于数组的结尾,您可以使用end($array);注意这也将数组光标移动到最后一个元素(而不是简单地返回值)。

使用迭代器

然而,ArrayIterator在您的情况下也可以正常运行:

第一个元素在ArrayIterator::current();构建后可用。 (如果你在迭代器的中途,你需要reset()。)

对于第n个或中间元素,您可以使用未记录的Iterator::seek($index);方法。

对于最后一个元素,您可以使用seek()count()的组合。

例如:

$array = array('frank' => 'one',
               'susan' => 'two',
               'ahmed' => 'three');

$arrayobject = new ArrayObject($array);
$iterator = $arrayobject->getIterator();

// First:
echo $iterator->current() . PHP_EOL;

// n'th:   (taken from the documentation)
if($iterator->valid()){
    $iterator->seek(1);            // expected: two, output: two
    echo $iterator->current() . PHP_EOL;    // two
}

// last: 
$iterator->seek(count($iterator)-1);
echo $iterator->current() . PHP_EOL;

答案 3 :(得分:0)

$arr = ["A", "B", "C", "D", "E"];
reset($arr);
// Get First Value From Array
echo current($arr);
// Get Last Value From Array 
echo end($arr);

请访问以下链接,了解上述功能的详细信息。

reset():http://php.net/manual/en/function.reset.php

current():http://php.net/manual/en/function.current.php

结束():http://php.net/manual/en/function.end.php