Php 从json中删除一个元素

Php 从json中删除一个元素,php,json,curl,Php,Json,Curl,我可以使用CURL从网站上获取数据,并将这些数据转换为json 我想从json中删除一个元素 输出: { "test":{ "numbers": [ "1", "27", "32", "1", "9

我可以使用CURL从网站上获取数据,并将这些数据转换为json

我想从json中删除一个元素

输出:

{
        "test":{
            "numbers":
                [
                       "1",
                       "27",
                       "32",
                       "1",
                       "94",
                       "1",
                       "8"
                ]
        }
}
我想从json中删除“1”。我该怎么做?谢谢你的帮助

我的代码:

<?php
function Curlconnect($start,$end,$website) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $website);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $website = curl_exec($ch);
    preg_match_all('@'.$start.'(.*?)'.$end.'@si',$website,$ver);
    return $ver[1];
    curl_close($ch);
}

function nt($start,$bit,$data,$a) {
    preg_match_all('@'.$start.'(.*?)'.$bit.'@si',$data,$ver);
    return $ver[1];
}

$url = 'http://www.url.com';
$getdata  = Curlconnect('<h4','h4>',$url);
$jsonData = ["data"];
$jsonData["numbers"] = [];
for ($a=0; $a<count($getdata); $a++) {
    $printdata = nt('>','</',$getdata[$a],$a);
    $jsonData["test"]["numbers"][] = $printdata[0];
}

echo json_encode($jsonData);
?>

您可以使用
array\u search()
在数组中查找值(您的
$jsonData[“test”][“numbers”]
数组),并使用
unset()
从数组中删除值

因为有多个“1”值,并且
array\u search()
只返回找到的第一个键,所以需要使用while循环来确保找到所有要删除的值

function remove_value_from_array ($val, $array)
{
    while ( ($key = array_search($array, $val)) !== false)
    {
        unset($array[$key]);
    }

    return $array;
}

$jsonData["test"]["numbers"] = remove_value_from_array($jsonData["test"]["numbers"], "1");

编辑:我想起了一种更简单的方法——一种允许您搜索多个值的方法。您只需使用
array_diff()
搜索值并删除它们

// Remove a single value of "1"
$jsonData["test"]["numbers"] = array_diff($jsonData["test"]["numbers"], array(1));

// Remove multiple values, of "1", "2", "5", and the word "test"
$jsonData["test"]["numbers"] = array_diff($jsonData["test"]["numbers"], array(1, 2, 5, "test"));

如果($elem===“1”)未设置($jsonData[“test”][“numbers”[$key]),则尝试使用
foreach($jsonData[“test”][“numbers”][$key])非常感谢@user2464424您的代码运行良好。您好@RobbieToyota您的第二个代码运行良好。非常感谢。嗨@RobbieToyota,我尝试了你的代码,结果是{“测试”:{“数字”:[1:“5”,2:“27”,3:“32”,4:“41”,5:“94”,6:“27”,7:“8”]}}我如何从json中删除1,2,3,4,5,6,7个数字?@Johny你是想删除1-5的值(只删除
[1:“5”]
记录)还是1-5的键(删除前5个,只留下
[6:“27”,7:“8”]
)?数组_diff将用于“搜索值”案例。如果要基于键删除,可以使用
array\u diff\u key()
-其工作方式相同,只是比较数组键,而不是数组值。