在 foreach 循环中取消设置将数组转换为关联数组
Unset in foreach loop turns array into associative array
我使用以下代码有条件地从数组中删除项目:
$fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple'];
echo json_encode($fruits) ."<br>";
foreach ($fruits as $key=>$fruit) {
if (in_array($fruit, ['apple', 'orange', 'melon', 'banana'])) {
unset($fruits[$key]);
}
}
echo json_encode($fruits) ."<br>";
现在的问题是 unset 将数组更改为关联数组。我应该如何删除项目而不导致这种情况?
输出:
["apple","orange","melon","banana","pineapple"]
{"4":"pineapple"}
你的问题是,每当 json_encode
发现一个数组没有从 0 开始的连续数字键时,它必须将它表示为一个带有数字键的对象,以便在 JavaScript(参见 manual page 中的示例 #4)。您可以通过 运行 数组通过 array_values
将其重新索引为 0 来解决此问题。例如:
$array = array('a', 'b', 'c');
echo json_encode($array, JSON_PRETTY_PRINT) . "\n";
unset($array[1]);
echo json_encode($array, JSON_PRETTY_PRINT) . "\n";
$array = array_values($array);
echo json_encode($array, JSON_PRETTY_PRINT) . "\n";
输出:
[
"a",
"b",
"c"
]
{
"0": "a",
"2": "c"
}
[
"a",
"c"
]
在你的例子中,在 foreach
循环之后,你将使用
$fruits = array_values($fruits);
重置该数组中的索引。
我使用以下代码有条件地从数组中删除项目:
$fruits = ['apple', 'orange', 'melon', 'banana', 'pineapple'];
echo json_encode($fruits) ."<br>";
foreach ($fruits as $key=>$fruit) {
if (in_array($fruit, ['apple', 'orange', 'melon', 'banana'])) {
unset($fruits[$key]);
}
}
echo json_encode($fruits) ."<br>";
现在的问题是 unset 将数组更改为关联数组。我应该如何删除项目而不导致这种情况?
输出:
["apple","orange","melon","banana","pineapple"]
{"4":"pineapple"}
你的问题是,每当 json_encode
发现一个数组没有从 0 开始的连续数字键时,它必须将它表示为一个带有数字键的对象,以便在 JavaScript(参见 manual page 中的示例 #4)。您可以通过 运行 数组通过 array_values
将其重新索引为 0 来解决此问题。例如:
$array = array('a', 'b', 'c');
echo json_encode($array, JSON_PRETTY_PRINT) . "\n";
unset($array[1]);
echo json_encode($array, JSON_PRETTY_PRINT) . "\n";
$array = array_values($array);
echo json_encode($array, JSON_PRETTY_PRINT) . "\n";
输出:
[
"a",
"b",
"c"
]
{
"0": "a",
"2": "c"
}
[
"a",
"c"
]
在你的例子中,在 foreach
循环之后,你将使用
$fruits = array_values($fruits);
重置该数组中的索引。