因此,当我运行此代码时,我试图反转数组并添加一些东西到循环上的最后一项:
$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时!不会显示任何建议吗?
答案 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!';
}
最后一个提示:isset
和empty
在引用未设置的变量或数组/对象成员时不会抛出错误,因此您可以(以及应该)之前测试整个路径访问它,为了理智和安全:
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