Php foreach循环中的Unset将数组转换为关联数组

Php foreach循环中的Unset将数组转换为关联数组,php,arrays,json,unset,Php,Arrays,Json,Unset,我使用以下代码有条件地从数组中删除项: $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($fr

我使用以下代码有条件地从数组中删除项:

$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>";

您的问题是,只要json_encode发现一个数组没有从0开始的连续数字键,它就必须用数字键将其表示为一个对象,以获得JavaScript中数组的准确表示形式,请参见上的示例4。您可以通过在数组_值中运行数组来解决此问题,从而将其重新索引为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";
输出:

["apple","orange","melon","banana","pineapple"]
{"4":"pineapple"}
[
    "a",
    "b",
    "c"
]
{
    "0": "a",
    "2": "c"
}
[
    "a",
    "c"
]
在您的例子中,在foreach循环之后,您将使用

$fruits = array_values($fruits);
重置该数组中的索引


您的问题是,只要json_encode发现一个数组没有从0开始的连续数字键,它就必须用数字键将其表示为一个对象,以获得JavaScript中数组的准确表示形式,请参见上的示例4。您可以通过在数组_值中运行数组来解决此问题,从而将其重新索引为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";
输出:

["apple","orange","melon","banana","pineapple"]
{"4":"pineapple"}
[
    "a",
    "b",
    "c"
]
{
    "0": "a",
    "2": "c"
}
[
    "a",
    "c"
]
在您的例子中,在foreach循环之后,您将使用

$fruits = array_values($fruits);
重置该数组中的索引


我认为没有任何变化,只是在数组中创建了一个洞,显示函数现在显式打印出索引,因为缺少一些。我认为没有任何变化,只是在数组中创建了一个洞,所以显示函数现在显式打印出索引,因为缺少一些索引。