这是我尝试过的:
foreach ($multiarr as $arr) {
foreach ($arr as $key=>$val) {
if (next($arr) === false) {
//work on last key
} else {
//work
}
}
}
再看一遍后,我认为next
这里使用错误,但我不知道该怎么办。
是否可以查看我是否在该数组的最后一次迭代中?
$lastkey = array_pop(array_keys($arr));
$lastvalue = $arr[$lastkey];
如果你想在循环中使用它,只需$lastkey
比较$key
您将需要保持迭代计数,并根据您正在迭代的数组的长度检查它。PHP 中默认的 Iterator 实现不允许您检查下一个元素是否有效——next 有一个 void 返回,并且 api 只公开了一个方法来检查当前位置是否有效。请参阅此处http://php.net/manual/en/class.iterator.php。要实现您正在考虑的功能,您必须使用 peek() 或 nextIsValid() 方法实现自己的迭代器。
试试这个:
foreach ($multiarr as $arr) {
$cnt=count($arr);
foreach ($arr as $key=>$val) {
if (!--$cnt) {
//work on last key
} else {
//work
}
}
}
请参阅下面的网址,我认为它对您有帮助:-
如何获取数组中的最后一个键?
更新:
<?php
$array = array(
array(
'first' => 123,
'second' => 456,
'last' => 789),
array(
'first' => 123,
'second' => 456,
'last_one' => 789),
);
foreach ($array as $arr) {
end($arr); // move the internal pointer to the end of the array
$key = key($arr); // fetches the key of the element pointed to by the internal pointer
var_dump($key);
}
输出:
string(4) "last" string(4) "last_one"
这个函数(理论上,我没有测试过)将返回多维关联数组中最后一个也是最深的键。给我一个机会,我想你会喜欢的。
function recursiveEndOfArrayFinder($multiarr){
$listofkeys = array_keys($multiarr);
$lastkey = end($listofkeys);
if(is_array($multiarr[$lastkey])){
recursiveEndOfArrayFinder($multiarr[$lastkey]);
}else{
return $lastkey;
}
}