请帮我将这段伪代码翻译成真正的PHP代码:
foreach ($arr as $k => $v)
if ( THIS IS NOT THE LAST ELEMENT IN THE ARRAY)
doSomething();
编辑:数组可能具有数值或字符串键
$array = array('a' => 1,'b' => 2,'c' => 3);
$lastElement = end($array);
foreach($array as $k => $v) {
echo $v . '<br/>';
if($v == $lastElement) {
// 'you can do something here as this condition states it just entered last element of an array';
}
}
更新1
正如 @Mijoja 指出的那样,如果数组中有多个相同的值,上述代码可能会出现问题。以下是修复方法。
$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 2);
//point to end of the array
end($array);
//fetch key of the last element of the array.
$lastElementKey = key($array);
//iterate the array
foreach($array as $k => $v) {
if($k == $lastElementKey) {
//during array iteration this condition states the last element.
}
}
更新2
我发现@onteria_提供的解决方案比我之前回答的更好,因为它不会修改数组的内部指针,所以我正在更新答案以匹配他的答案。
$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 2);
// Get array keys
$arrayKeys = array_keys($array);
// Fetch last array key
$lastArrayKey = array_pop($arrayKeys);
//iterate array
foreach($array as $k => $v) {
if($k == $lastArrayKey) {
//during array iteration this condition states the last element.
}
}
array_key_last
,如果您使用的是 PHP >= 7.3,这似乎是更好的选择。$array = array('a' => 1,'b' => 2,'c' => 3);
$lastKey = array_key_last($array);
foreach($array as $k => $v) {
echo $v . '<br/>';
if($k == $lastKey) {
// 'you can do something here as this condition states it just entered last element of an array';
}
}
array_key_last
,它也返回数组的最后一个键,而不影响内部指针:https://secure.php.net/array_key_last。这将进一步简化您的解决方案 :) - CGundlach这对我总是有效
foreach($array as $key => $value) {
if (end(array_keys($array)) == $key)
// Last key reached
}
编辑 30/04/15
$last_key = end(array_keys($array));
reset($array);
foreach($array as $key => $value) {
if ( $key == $last_key)
// Last key reached
}
为避免 @Warren Sergent 提到的 E_STRICT 警告
$array_keys = array_keys($array);
$last_key = end($array_keys);
$myarray = array(
'test1' => 'foo',
'test2' => 'bar',
'test3' => 'baz',
'test4' => 'waldo'
);
$myarray2 = array(
'foo',
'bar',
'baz',
'waldo'
);
// Get the last array_key
$last = array_pop(array_keys($myarray));
foreach($myarray as $key => $value) {
if($key != $last) {
echo "$key -> $value\n";
}
}
// Get the last array_key
$last = array_pop(array_keys($myarray2));
foreach($myarray2 as $key => $value) {
if($key != $last) {
echo "$key -> $value\n";
}
}
array_pop
作用于由 array_keys
创建的临时数组,它不会修改原始数组。
$ php test.php
test1 -> foo
test2 -> bar
test3 -> baz
0 -> foo
1 -> bar
2 -> baz
$first = array_shift(array_keys($myarray2));
。 - Luke$i = 0; //a counter to track which element we are at
foreach($array as $index => $value) {
$i++;
if( $i == sizeof($array) ){
//we are at the last element of the array
}
}
sizeof()
是没有意义的。数组的大小永远不会改变,那么为什么要一直调用返回计数的函数呢?更重要的是,PHP现在有了 array_key_last()
,它更加直接,并且不仅限于处理索引数组。 - mickmackusa我知道这已经很老了,使用SPL迭代器可能只是一种过度设计,但是无论如何,在这里提供另一种解决方案:
$ary = array(1, 2, 3, 4, 'last');
$ary = new ArrayIterator($ary);
$ary = new CachingIterator($ary);
foreach ($ary as $each) {
if (!$ary->hasNext()) { // we chain ArrayIterator and CachingIterator
// just to use this `hasNext()` method to see
// if this is the last element
echo $each;
}
}
我的解决方案也很简单。。。
$array = [...];
$last = count($array) - 1;
foreach($array as $index => $value)
{
if($index == $last)
// this is last array
else
// this is not last array
}
array_key_last()
函数。请参见被接受的答案。 - mickmackusa$length = sizeOf($arr);
while (key(current($arr)) != $length-1) {
$v = current($arr); doSomething($v); //do something if not the last item
next($myArray); //set pointer to next item
}
使用array_keys
函数的简单方法是获取键并仅获取反转数组的第一个键[0]
,即最后一个键。
$array = array('a' => 1,'b' => 2,'c' => 3);
$last_key = array_keys(array_reverse($array, true))[0];
foreach($array as $key => $value) {
if ($last_key !== $key)
// THIS IS NOT THE LAST ELEMENT IN THE ARRAY doSomething();
}
注意: array_reverse
函数用于反转数组,它接受两个参数,第一个参数是要反转的数组,第二个参数为 true 时,将反转数组并保留键的顺序。
array_key_last()
相比,处理过程过多。 - mickmackusa
for
循环进行count($arr) - 1
次迭代? - Marcin