我有一个json数组。其中我有3个值。当我删除第一个或第二个值时,删除后的结果数组是一种格式。但是当我删除最后一个值时,结果数组总是会改变。我通过将数组转换回字符串来回显数组。
当我删除除最后一个之外的任何值,即第一个或第二个或任何其他值
result = {“1”:{“name”:“cat”},“2”:{“name”:“elephant”}}
这里我删除了第一个值 - 狗
$animals = '{
"0":{"name":"dog"},
"1":{"name":"cat"},
"2":{"name":"elephant"}
}';
$animals = json_decode($animals, true);
$del_value = "elephant";
$loginArray = array('name' => $del_value);
if (in_array($loginArray, $animals)) {
foreach ($animals as $key => $value) {
if (in_array($del_value, $value)) {
unset($animals[$key]);
}
}
}
$animals_string = json_encode($animals);
echo $animals_string;
但是当我删除最后一个值时,它会创建不同的格式
result = [{“name”:“dog”},{“name”:“cat”}]
这里我删除了最后一个值 - elephant
$animals = '{
"0":{"name":"dog"},
"1":{"name":"cat"},
"2":{"name":"elephant"}
}';
$animals = json_decode($animals, true);
$del_value = "elephant";
$loginArray = array('name' => $del_value);
if (in_array($loginArray, $animals)) {
foreach ($animals as $key => $value) {
if (in_array($del_value, $value)) {
unset($animals[$key]);
}
}
}
$animals_string = json_encode($animals);
echo $animals_string;
答案 0 :(得分:1)
此行为是预期的。
PHP支持2种类型的数组:
然而,JSON仅支持第二种类型的数组,因此当您将关联数组转换为JSON时,您将获得一个对象。
示例:
print_r(json_encode([ 1,2,3,4 ])); //Prints [1,2,3,4]
print_r(json_encode([ 0=> 1, 1=>2, 2=>3, 3=>4 ])); //also prints [1,2,3,4]
print_r(json_encode([ "a" => 1, "b" => 2 ])); //Prints {"a":1,"b":2}
print_r(json_encode([ 1 => "a" , 2 => "b" ])); //Prints {"1":"a","2":"b"}
通过删除原始密钥强制PHP数组(任何类型)到JSON数组:
$animals_string = json_encode(array_values($animals)); //Will always have form : [{"name": "X" },{"name":"Y"}]
强制PHP数组(任何类型)到JSON对象:
$animals_string = json_encode((object)$animals); //Will always have form : {"i1":{"name":"X"},"i2":{"name":"Y"}}
在您的特定情况下的问题是您的JSON对象被转换为PHP数字索引数组,当编码回来时它变成JSON数组:
$animals = '{
"0":{"name":"dog"},
"1":{"name":"cat"},
"2":{"name":"elephant"}
}';
$animals = json_decode($animals, true);
echo json_encode($animals);
回声
[{ “名称”: “狗”},{ “名称”: “猫”},{ “名称”: “大象”}]
如果删除除last之外的其中一个索引,则会使PHP数组关联,并将其转换为JSON对象。
这就是PHP的工作方式如果你想要一个不同的输出,你需要明确它,如下所示:
$animals = '{
"0":{"name":"dog"},
"1":{"name":"cat"},
"2":{"name":"elephant"}
}';
$animals = json_decode($animals, true);
$del_value = "elephant";
$loginArray = array('name' => $del_value);
if (in_array($loginArray, $animals)) {
foreach ($animals as $key => $value) {
if (in_array($del_value, $value)) {
unset($animals[$key]);
}
}
}
$animals_string = json_encode((object)$animals);
echo $animals_string; //Always the same format
我希望这会有所帮助。