php array_reverse获取最后一个循环

时间:2017-08-14 18:45:30

标签: php arrays foreach

因此,当我运行此代码时,我试图反转数组并添加一些东西到循环上的最后一项:

$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']); LAST ELEMENT时!不会显示任何建议吗?

2 个答案:

答案 0 :(得分: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 :(得分:0)

我知道你说你希望它在循环中执行,但是你可能会更好地让循环完成他们应该做的工作,并且在循环之后,你可以在最后一个元素上工作:

$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!';
}

最后一个提示:issetempty在引用未设置的变量或数组/对象成员时不会抛出错误,因此您可以(以及应该)之前测试整个路径访问它,为了理智和安全:

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

编辑:

如果在使用array_reverse时仍然无效,则可能是json来自 ,它可能是一个对象。请务必使用JS对象解析json作为数组:http://php.net/manual/en/function.json-decode.php