php检查数组中的特定值是否包含大于0的值
我对编程(系统管理员)相对来说是个新手,但我的头很痛。我想检查数组或json中的值是否大于0,并根据其值将$contains设置为“true”或“false” 我正在创建一个数组,稍后将其转换为json: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
$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