Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php检查数组中的特定值是否包含大于0的值_Php_Arrays_Json - Fatal编程技术网

php检查数组中的特定值是否包含大于0的值

php检查数组中的特定值是否包含大于0的值,php,arrays,json,Php,Arrays,Json,我对编程(系统管理员)相对来说是个新手,但我的头很痛。我想检查数组或json中的值是否大于0,并根据其值将$contains设置为“true”或“false” 我正在创建一个数组,稍后将其转换为json: $fh=fopen(“/var/www/path/to/txt/file/”$date.txt“,'r')//那是我的TXT文件 $data=array(); 而($line=fgets($fh)){ 如果(修剪($line)!=''){ $line_data=explode(“:”,$lin

我对编程(系统管理员)相对来说是个新手,但我的头很痛。我想检查数组或json中的值是否大于0,并根据其值将$contains设置为“true”或“false”

我正在创建一个数组,稍后将其转换为json:

$fh=fopen(“/var/www/path/to/txt/file/”$date.txt“,'r')//那是我的TXT文件
$data=array();
而($line=fgets($fh)){
如果(修剪($line)!=''){
$line_data=explode(“:”,$line);
$data[]=array('item'=>trim($line_data[0]),'value'=>trim($line_data[1]);
}
}
fclose($fh);
现在im从中删除一行并将其转换为json:

$data=\array_diff_key($data,[“Untersuchte Objekte]”)//删除特定行
$json_data=json_encode($data,json_UNESCAPED_UNICODE | json_NUMERIC_CHECK);//用于进一步使用,并将字符串值转换为int
现在我的json看起来像:

{
    "1": {
        "item": "Total items found",
        "value": 0
    },
    "2": {
        "item": "Infected objects and other objects",
        "value": 0
    },
    "3": {
        "Item": "Disinfected objects",
        "value": 0
    },
    "4": {
        "item": "moved to memory",
        "value": 0
    },
    "5": {
        "item": "distant objects",
        "value": 0
    },
    "6": {
        "item": "uninfected items",
        "value": 0
    },
    "7": {
        "item": "examination error",
        "value": 0
    },
    "8": {
        "item": "Password protected items",
        "value": 0
    },
    "9": {
        "item": "skipped items",
        "value": 0
    }
}
现在,如果json中的“value”之一大于0,我希望$contains为“true”。我试着用这个:

$data=array(json_decode($json_data));
$a=数组搜索('value',数组列('data',value');
如果($a>0)
{
$contains=“true”;
}
其他的
{
$contains=“false”;
}

如果“value”大于0,$contains=“true”?

你可以在你的数组上迭代,当你有了你要搜索的内容时,停止它,我如何才能做到这一点:

$contains = false;
foreach(json_decode($json_data, true) as $item){
    if ($item['value']) {
        $contains = true;
        break;
    }
}

你可以通过多种方式实现这一点。但这可以帮助您更进一步。

您可以对数组进行迭代,并在获得搜索内容时停止它:

$contains = false;
foreach(json_decode($json_data, true) as $item){
    if ($item['value']) {
        $contains = true;
        break;
    }
}

你可以通过多种方式实现这一点。但是这可以帮助您更进一步。

在第一次创建数据JSON数据时这样做会更快(因此在读取.txt文件时)


在第一次创建数据JSON数据时(因此在读取.txt文件时)这样做会更快


您可以使用
array\u sum
对数组的所有元素求和。如果得到正和,则有大于0的元素

$values = array_column($data,'value');
$contains = array_sum($values) > 0;

注意:假设您的
值永远不会低于零,这将始终有效。

您可以使用
数组\u sum
对数组的所有元素求和。如果得到正和,则有大于0的元素

$values = array_column($data,'value');
$contains = array_sum($values) > 0;

注意:假设您的
值永远不会低于零,这将始终有效。

因此,对于解决我问题的答案,@AyushGupta和@user3783243在我的帖子的右侧发表了评论

改变

$data=array(json_decode($json_data));
$a=数组搜索('value',数组列('data',value');
如果($a>0)
{
$contains=“true”;
}
其他的
{
$contains=“false”;
}

$data=array(json_decode($json_data,TRUE));
$a=数组搜索(0,数组列($data,'value');
如果($a>0)
{
$contains=“true”;
}
其他的
{
$contains=“false”;
}

已交付解决方案,因此$contains现在为“真”或“假”。感谢大家:)

所以对于解决我问题的答案,@AyushGupta和@user3783243在我的帖子的右侧发表了一篇评论

改变

$data=array(json_decode($json_data));
$a=数组搜索('value',数组列('data',value');
如果($a>0)
{
$contains=“true”;
}
其他的
{
$contains=“false”;
}

$data=array(json_decode($json_data,TRUE));
$a=数组搜索(0,数组列($data,'value');
如果($a>0)
{
$contains=“true”;
}
其他的
{
$contains=“false”;
}

已交付解决方案,因此$contains现在为“真”或“假”。感谢大家:)

它不应该是
$a=array\u search(0,array\u column($data,'value'))
json\u decode($json\u data)
返回一个对象,而不是数组,使用
json\u decode($json\u data,TRUE)
返回一个数组。@AyushGupta是的,那一行和用户3783243的那一行修复了它。非常感谢:)@nice\u dev如何选择评论作为答案?我应该把它写下来作为答案吗?请注意,
intersect\u diff\u key()
不能按预期工作,因为您要求比较键,但第二个参数的键为
0
而不是
Untersuchte Objekte
。在这里看到它失败了:也许你只是想
取消设置($data[“Untersuchte Objekte”])
?它不应该是
$a=array\u search(0,array\u列($data,'value'))
json\u decode($json\u data)
返回一个对象,而不是数组,使用
json\u decode($json\u data,TRUE)
返回一个数组。@AyushGupta是的,那一行和用户3783243的那一行修复了它。非常感谢:)@nice\u dev如何选择评论作为答案?我应该把它写下来作为答案吗?请注意,
intersect\u diff\u key()
不能按预期工作,因为您要求比较键,但第二个参数的键为
0
而不是
Untersuchte Objekte
。在这里看到它失败了:也许你只是想
取消设置($data[“Untersuchte Objekte”])
?这可能不是很“关注点分离”友好。您可以使用一个服务读取您的文件,使用另一个服务处理您的数据,不是吗?你怎么看?@S.LT取决于
$contains=true之后的情况
我建议
break
,因为一旦找到,就不需要进一步搜索了。@MarkusZeller,由于正在加载数据,使用break将停止数据加载。如果数据加载的唯一目的是测试这个值,那么它将是好的,如果不是,那么它将丢失其余的数据。在这种情况下,我完全同意。我以为这只是一次侦查。这可能不是很友好的“关注点分离”。您可以使用一个服务读取您的文件,使用另一个服务处理您的数据,不是吗?你怎么看?@S.LT取决于
$contains=true之后的情况
我建议
中断
,因为一旦找到,就不需要进一步搜索了。@MarkusZeller,因为这是在加载d