2016-04-27 52 views
0

我想通過JSON數組進行排序並刪除用戶告訴頁面刪除的項。我已經使用了一些回聲來查看值是否匹配,甚至當$ value ['AD']和$ lineToRemove的值相同時,我的If語句不捕獲它並跳到Else節。我試過沒有我的價值是字符串,我已經嘗試過===,並且我嘗試了幾種不同的解決方案。刪除JSON數組值時PHP變量不匹配

這是我現在的代碼。

$str = file_get_contents($file2); 
$json = json_decode($str, true); // decode the JSON into an associative array 

$match = "We have a match!"; 
$test = "Sorry, no match found."; 

foreach ($json as $field => &$value) { 
if ((string)$value['AD'] == (string)$lineToRemove) { 

    echo '<pre>' . print_r($match, true) . '</pre>'; 

    unset($json[$field]); 
    $json = array_values($json); 
    var_dump($json); 
} 
else { 
    echo '<pre>' . print_r($test, true) . '</pre>'; 
} 
} 

$finalArray = json_encode($json); 
file_put_contents($file2, $finalArray); 

$ lineToRemove是用戶試圖刪除的文件名的變量。這裏是我的JSON的示例:

[ 
    { 
    "AD":"image-1.png", 
    "DURATION":1000 
    } 
] 

我試圖回答this的問題,但它沒有工作,我目前擁有的代碼是我來此的工作最接近的一次。

回答

0

我想通了。變量$ lineToRemove在它的最後有一個換行符,因此使它不同。如果有人感興趣,這是工作代碼。

// Get contents of JSON array to remove items from the JSON array 
    $str = file_get_contents($file2); 
    $json = json_decode($str, true); // decode the JSON into an associative array 

    // Loop through all of the items in the JSON array to find the file you want to delete 
    foreach ($json as $field => &$value) { 

     // Remove the line break at the end of the $lineToRemove variable so you 
     // can compare it to the $value['AD'] variable 
     $lineToRemove = str_replace("\n", '', $lineToRemove);; 

     if ($value['AD'] == $lineToRemove) { 
      // Remove $lineToRemove from JSON array 
      unset($json[$field]); 
      $json = array_values($json); 
     } 
    } 

    // Save new array to JSON file 
    $finalArray = json_encode($json); 
    file_put_contents($file2, $finalArray);