我正在尝试打开.json文件并检查该文件是否包含由其键标识的数组。如果是这样,我想删除它并将文件写回服务器。但是,我没有运气,我认为这是我对PHP中数组数组的误解:
PHP:
$song_id = "j8sUV-ykOB";
$file = "file.json";
$song_list = json_decode(file_get_contents($file),true);
foreach($song_list as $song){
if(in_array($song_id,$song_list)){
unset($song);
file_put_contents($file,json_encode($song_list,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT));
}
}
file.json:
{
"uKrb3eNCf": [
"Thunder Rolls",
"c"
],
"kdOzCKjKN-": [
"Turn the Page",
"a"
],
"bDreHgZgxF": [
"Wild Nights",
"a"
],
"oeNcwqZJS": [
"Every day is a winding road",
"b,j"
],
"j8sUV-ykOB": [
"Testin",
"b"
]
}
答案 0 :(得分:2)
在您的情况下,您可以避免for循环,因为数据的结构方式,我们可以直接调用$song_list
数组中的特定数据数组。
您的歌曲ID是键,因此您可以直接检查您的song_list数组中是否存在该键,如果确实存在,则取消设置该键。
这是实际行动:
<?php
$song_id = "j8sUV-ykOB";
$file = "file.json";
$song_list = json_decode(file_get_contents($file),true);
if (array_key_exists($song_id, $song_list))
{
unset($song_list[$song_id]);
file_put_contents($file,json_encode($song_list,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT));
}
答案 1 :(得分:1)
您想要的是unset
$song_list[$key]
,而不是$song
变量:
foreach($song_list as $key => $song){
if(in_array($song_id,$song_list)){
unset($song_list[$key]);
}
}
file_put_contents($file,json_encode($song_list,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT));
代码中的$song
变量包含json文件中当前元素的值,对该值执行unset
没有意义。
答案 2 :(得分:0)
<?php
$song_id = "j8sUV-ykOB";
$file = "file.json";
$song_list = json_decode(file_get_contents($file),true);
$new_array = array();
foreach($song_list as $key => $song){
if($key != $song_id){
$new_array[$key] = $song;
}
}
file_put_contents($file,json_encode($new_array,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT));
?>
这段代码成功地为我服务。在foreach中,$ song_id等于或不是数组的键。如果不在新数组中插入此数组。所以在完成foreach的所有循环之后,创建了新的数组。因此在解码这个新数组后再次写入json文件。感谢