2015-04-24 2 views
0

У меня есть этот массив, который я пытаюсь обработать, используя цикл 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

В чем проблема/вопрос? Какова ваша цель? – Rizier123

+0

@ Rizier123, я пытаюсь определить, когда я дойду до конца массива. Использование переменной счетчика не работает. – NaijaProgrammer

+0

Вы имеете в виду, когда находитесь на последней итерации? – Rizier123

ответ

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!"; 

} 
+0

Спасибо, @ Rizier123 – NaijaProgrammer

+0

@NaijaProgrammer Добро пожаловать! – Rizier123

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; 
    } 
} 
+0

Я только что заявил выше, что он не является последовательным. – NaijaProgrammer

+0

@NaijaProgrammer затем просто преобразует его в значения массива для цикла, отредактированный ответ. – SamV

+0

Хорошо, что OP не имеет ассоциативного массива! – Rizier123

Смежные вопросы