PHP删除数组中的数组

时间:2017-08-18 16:45:38

标签: php arrays json

我正在尝试打开.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"
    ]
}

3 个答案:

答案 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文件。感谢