我正在尝试使用foreach
循环处理此数组。我需要在到达数组末尾时调用一个函数。但是,我有一个问题,确定我何时到达阵列的末尾。
注意:由于我正在处理的特性,使用for
,while
或do ... while
循环不会进入等式。我坚持使用foreach
循环。
另外,如果您建议我使用PHP的内置end()
函数,我该怎么做?该函数返回数组末尾的值。但是,在我的情况下,数组末尾的值是一个数组,而不是标量值/变量。
下面是我的代码并尝试确定数组的结束。
$arr = array
(
0 => array
(
'departures' => array('date'=>'23 Feb', 'location'=>'Lagos'),
'returns' => array('date'=>'24 Feb', 'location'=>'Abuja')
),
1 => array
(
'departures' => array('date'=>'25 May', 'location'=>'Dubai'),
'returns' => array('date'=>'1 June', 'location'=>'New York')
),
3 => array
(
'departures' => array('date'=>'2 Apr', 'location'=>'Tokyo'),
'returns' => array('date'=>'6 Apr', 'location'=>'Seoul')
),
5 => array
(
'departures' => array('date'=>'2 Apr', 'location'=>''),
'returns' => array('date'=>'6 Apr', 'location'=>'')
),
2 => array
(
'departures' => array('date'=>'2 Apr', 'location'=>'LA'),
'returns' => array('date'=>'6 Apr', 'location'=>'California')
),
4 => array
(
'departures' => array('date'=>'2 Apr', 'location'=>''),
'returns' => array('date'=>'6 Apr', 'location'=>'Hong Kong')
),
);
$counter = 0;
$arr_size = count($arr);
foreach ($arr AS $curr_array)
{
$departures = $curr_array['departures'];
if( empty($departures['location']) )
{
continue;
}
if( $counter == ($arr_size - 1) )
{
//reached end of array, execute function
}
//process array
$counter++;
}
非常感谢任何帮助。
答案 0 :(得分:2)
不要让它变得复杂,这应该适合你:
这里我首先得到数组的最后一个键,将所有键放入一个带array_keys()
的数组中,然后访问数组的最后一个元素==数组的最后一个键。
在此之后,只需检查你的foreach循环,如果密钥等于最后一个。
$end = array_keys($arr)[count($arr)-1];
foreach($arr as $k => $v) {
if($k == $end)
echo "last one!";
else
echo "still going!";
}
答案 1 :(得分:1)
您可以将其转换为循环的顺序数组
$array = array('banana', 'apple', 'orange', 'grape');
$size = count($array);
foreach(array_values($array) as $index => $fruit) {
if ($index === ($size - 1)) {
// Last element in the array
echo "The last fruit is {$fruit}";
} else {
echo $fruit.PHP_EOL;
}
}