массивы — php array_reverse получить последний в цикле

Поэтому я пытаюсь изменить массив и ДОБАВИТЬ что-то до последнего элемента в цикле, когда я запускаю этот код:

$data = ($json['data']);
foreach($data as $item){
if(isset($item['Metadata']) && $item['Metadata']['id_suscripcion'] == $id_sus){
if ($item === end($data))
echo $item['id'].' LAST ELEMENT!';
}
}

Я получаю такие результаты:

Array
(
[ticketNumber] => 172252526529700541
[Metadata] => Array
(
[id_suscripcion] => 0000000000004314
)

[id] => 193172252526529772
)

Array
(
[ticketNumber] => 172242526591400527
[Metadata] => Array
(
[id_suscripcion] => 0000000000004314
)

[id] => 193172242526591380
)

Array
(
[ticketNumber] => 172232526775600149
[Metadata] => Array
(
[id_suscripcion] => 0000000000004314
)

[id] => 193172232526775687
)
193172232526775687 LAST ELEMENT!

Теперь проблема в том, когда я добавляю array_reverse () $data = array_reverse($json['data']); ПОСЛЕДНИЙ ЭЛЕМЕНТ! не покажет, есть предложения?

-1

Решение

Если вам нужно добавить что-то для каждого массива внутри $ data и что-то дополнительное для последнего, я предлагаю вам разбить его или использовать цикл for для подсчета.

$data = array_reverse($json['data']);
for($i = 0; $i < count($data); $i++){
if( isset( $data[$i]['Metadata'] ) && $data[$i]['Metadata']['id_suscripcion'] == $id_sus){
if ( $i ===0 || $data[$i] === reset( $data ) )
echo $item['id'].' LAST ELEMENT!';
}
}
1

Другие решения

Я знаю, что вы сказали, что хотите, чтобы он выполнялся в цикле, но вам может быть лучше, чтобы циклы выполняли работу, которую они должны делать, а после циклов выполняйте свою работу с последним элементом:

$data = ($json['data']);
foreach($data as $item){
// Other work for looping...
}

$last = end($data);
$key  = key($data);

if(isset($last['Metadata']) && $last['Metadata']['id_suscripcion'] == $id_sus){
echo $last['id'].' LAST ELEMENT!';
}

Это позволит сократить количество тестов в цикле.

Другой вариант может заключаться в том, чтобы получить последний ключ перед циклом (чтобы сократить зацикленные вызовы функций):

$data = ($json['data']);

// $data = array_reverse($data);

end($data);
$last_key = key($data);

foreach($data as $key => $item){
if(isset($item['Metadata']) && $item['Metadata']['id_suscripcion'] == $id_sus){
if ($key === $last_key)
echo $item['id'].' LAST ELEMENT!';
}
}

И, наконец, за реальный ответ, если вы пытаетесь добавлять Что-то в массив, вы захотите добавить его к фактическому элементу (что у вас есть, есть копия). Вы можете сделать это с помощью $item в качестве ссылки или путем ссылки на элемент по ключу в содержащем массиве:

foreach($data as &$item){
if(isset($item['Metadata']) && $item['Metadata']['id_suscripcion'] == $id_sus){
if ($key === $last_key)
$item[] = 'LAST ELEMENT!';
}
}

Или же:

foreach($data as $key => $item){
if(isset($item['Metadata']) && $item['Metadata']['id_suscripcion'] == $id_sus){
if ($key === $last_key)
$data[$key][] = 'LAST ELEMENT!';
}
}

Если бы вы использовали мой первый кодовый блок, он бы выглядел примерно так:

foreach($data as $item){
// Other work for looping...
}

end($data);
$key  = key($data);
$last &= $data[$key];

if(isset($last['Metadata']) && $last['Metadata']['id_suscripcion'] == $id_sus){
$last[] = 'LAST ELEMENT!';
}

И последний совет: isset а также empty не выбрасывайте ошибки при обращении к переменным или элементам массива / объекта, которые не заданы, так что вы можете (и вид должен) проверить весь путь перед тем, как получить к нему доступ, для здравого смысла и безопасности:

if (
isset($last['Metadata']['id_suscripcion']) &&
$last['Metadata']['id_suscripcion'] == $id_sus
) {
// do a thing
}

РЕДАКТИРОВАТЬ:

Если это все еще не работает при использовании array_reverse вполне вероятно, что если это приход от jsonЭто может быть объект. Не забудьте расшифровать json с объектами JS в качестве массивов: http://php.net/manual/en/function.json-decode.php

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector