You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:06:03