请帮我翻译这个伪代码,以真正的PHP代码:检查,如果当前元素为最后一个元素
foreach ($arr as $k => $v)
if (THIS IS NOT THE LAST ELEMENT IN THE ARRAY)
doSomething();
编辑:数组可以具有数字或字符串键
请帮我翻译这个伪代码,以真正的PHP代码:检查,如果当前元素为最后一个元素
foreach ($arr as $k => $v)
if (THIS IS NOT THE LAST ELEMENT IN THE ARRAY)
doSomething();
编辑:数组可以具有数字或字符串键
您可以使用PHP的end()
$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';
}
}
UPDATE1
正如@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.
}
}
UPDATE2
我找到解决方案通过@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.
}
}
谢谢@onteria_
如果您在数组中有多次相同的值 – Mijoja 2012-04-10 19:51:11
谢谢@Mijoja指出,这将会出现问题。更新了代码:) – 2012-04-11 07:16:01
$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
我比接受的答案更喜欢这个,因为它只需要一行用于循环外的初始化。 – 2012-12-11 17:27:46
我喜欢这个比接受的答案更好,因为它不会改变你要循环的数组的内部指针。 – autonymous 2013-07-01 18:03:03
对第一个元素'$ first = array_shift(array_keys($ myarray2));' – Luke 2014-05-27 06:23:37
如果项目按数字排序,则使用key()函数确定当前项目的索引并将其与长度进行比较。你必须通过的项目在一个while循环使用的next()或prev()循环,而不是一个for循环:
$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
}
$arr = array(1, 'a', 3, 4 => 1, 'b' => 1);
foreach ($arr as $key => $val) {
echo "{$key} = {$val}" . (end(array_keys($arr))===$key ? '' : ', ');
}
// output: 0 = 1, 1 = a, 2 = 3, 4 = 1, b = 1
这永远不会把戏对我来说
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塞尔让
提到E_STRICT警告0$array_keys = array_keys($array);
$last_key = end($array_keys);
我的解决办法,也很简单..
$array = [...];
$last = count($array) - 1;
foreach($array as $index => $value)
{
if($index == $last)
// this is last array
else
// this is not last array
}
我这里知道这是旧的,并且使用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;
}
}
为什么不用这个非常简单的方法:
$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
}
}
为什么不对'count($ arr) - 1'迭代使用'for'循环? – Marcin 2011-05-23 01:44:36
如果你有混合键,你如何确定哪个键是最后一项?如果您希望它作为添加到数组中的最后一项,则应该有一些数据来指示时间戳。 – Rasika 2011-05-23 01:53:14
last的定义:由数组的内部顺序决定。这与说foreach循环选择的最后一个元素相同 – shealtiel 2011-05-23 02:32:32