PHP array_slice 在 foreach 中使用时递增
PHP array_slice increment when used in 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'], 0, 10) as $slot) {
$row_array['buttons'][] = array(
'caption' => $slot['id'],
);
array_push($json_response, $row_array);
}
$final_json = [
"elements" => $json_response
];
这是一个工作演示
预期结果将是
{
"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'], 0, 10) as $slot) {
$row_array['buttons'] = [];
$row_array['buttons'][] = array('caption' => $slot['id'],);
array_push($json_response, $row_array);
}
第二个解决方案:
foreach (array_slice($array['message'], 0, 10) as $slot) {
$row_array['buttons'] = [array('caption' => $slot['id'],)];
array_push($json_response, $row_array);
}
我正在尝试使用 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'], 0, 10) as $slot) {
$row_array['buttons'][] = array(
'caption' => $slot['id'],
);
array_push($json_response, $row_array);
}
$final_json = [
"elements" => $json_response
];
这是一个工作演示
预期结果将是
{
"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'], 0, 10) as $slot) {
$row_array['buttons'] = [];
$row_array['buttons'][] = array('caption' => $slot['id'],);
array_push($json_response, $row_array);
}
第二个解决方案:
foreach (array_slice($array['message'], 0, 10) as $slot) {
$row_array['buttons'] = [array('caption' => $slot['id'],)];
array_push($json_response, $row_array);
}