PHP中使用array_search删除JSON解析后数组指定条目问题求解
问题根因
你调用的array_search默认仅支持匹配一维数组的值,而你通过json_decode得到的$json是二维数组:第一维是数字索引的数组,每个元素都是包含Zustand/Losnummer/Gewinnklasse/Preis字段的关联子数组,直接搜索10无法匹配到任何第一维元素,因此代码不生效。
修复方案
方案1:遍历数组匹配指定字段值后删除
适合只需要删除第一个匹配条目的场景
<?php $targetVal = 10; $str = file_get_contents("lose.json"); $json = json_decode($str, true); // 校验JSON解析是否成功 if ($json === null) { die("JSON文件解析失败"); } foreach ($json as $key => $item) { // 匹配Preis字段等于目标值的条目 if ($item['Preis'] == $targetVal) { unset($json[$key]); echo "匹配到条目,已删除"; break; // 只删第一个匹配项,如果要删除所有匹配项删除这行即可 } } // 可选:重置数组索引,避免后续操作出现索引异常 $json = array_values($json); // 可选:将修改后的数组写回原文件,否则仅内存中的数据被修改 file_put_contents("lose.json", json_encode($json, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); ?>
方案2:用array_filter过滤数组(更简洁)
适合删除所有匹配条目的场景
<?php $targetVal = 10; $str = file_get_contents("lose.json"); $json = json_decode($str, true); if ($json === null) { die("JSON文件解析失败"); } // 过滤掉所有Preis等于目标值的条目 $json = array_filter($json, function($item) use ($targetVal) { return $item['Preis'] != $targetVal; }); // 重置索引+写回文件操作同上 $json = array_values($json); file_put_contents("lose.json", json_encode($json, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); ?>
内容的提问来源于stack exchange,提问作者sokoviaaccords
相关产品推荐
相关产品推荐

