微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP array_slice 在 foreach 中使用时的增量

如何解决PHP array_slice 在 foreach 中使用时的增量

我正在尝试使用 array_slice 循环遍历 JSON 对象,然后从中创建另一个 JSON。但出于某种原因,每个循环都会增加一个对象。 例如,如果我有这个 JSON

{
  "message":[
     {"id":1},{"id":2}
  ]
}

我使用 array_slice 循环并打印 id 键,结果将是

id 1
id 1,id 2

我希望它是

id 1
id 2

这是我的代码

$result = '{"message":[{"id":1},{"id":2}]}';

$array = json_decode($result,true);
$json_response = array();

foreach (array_slice($array['message'],10) as $slot) {
    $row_array['buttons'][] = array(
            'caption' => $slot['id'],);
    array_push($json_response,$row_array);
}

$final_json = [
        "elements" => $json_response
    ];

这是一个工作演示

Demo

预期的结果是

{
    "elements": [
        {
            "buttons": [
                {
                    "caption": 1
                }
            ]
        },{
            "buttons": [
                {
                    "caption": 2
                }
            ]
        }
    ]
}

解决方法

当您在...中添加项目时

$row_array['buttons'][]

[] 只是将新项目添加到现有值(即到目前为止您添加的所有其他值)。同样,因为您有 = array() 这给出了您需要的数组。所以删除 []...

 $row_array['buttons'] =  [['caption' => $slot['id']]];

值周围的额外 [] 集提供了所需的额外嵌套级别。

这是你的沙箱给...

{
    "elements": [
        {
            "buttons": [
                {
                    "caption": 1
                }
            ]
        },{
            "buttons": [
                {
                    "caption": 2
                }
            ]
        }
    ]
}
,

在 php 中,变量可以在循环后存活,这意味着 $row_array 在第一次迭代后仍然存活,并且其中包含已经添加的值。只需为 $row_array['buttons'] 添加数组初始化,或者不将值添加到数组中,只需分配值即可。

第一个解决方案:

foreach (array_slice($array['message'],10) as $slot) {
    $row_array['buttons'] = [];
    $row_array['buttons'][] = array('caption' => $slot['id'],);
    array_push($json_response,$row_array);
}

第二种解决方案:

foreach (array_slice($array['message'],10) as $slot) {
    $row_array['buttons'] = [array('caption' => $slot['id'],)];
    array_push($json_response,$row_array);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。