我想知道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)
移到了循环之外。
答案 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