我需要获得5个变量中最低的一个。
我希望如果变量未设置或为空,脚本必须从结果中排除该变量。
$var1='17';
$var2='19';
$var3='20';
$var4='1';
$var5='';
$arr = compact('var1','var2','var3','var4','var5'); // Stores values in array $arr
$highval = max($arr);
$lowval = min($arr);
$stores=count(array_filter($arr));
echo 'Item is available in '.$stores.' vars and is between '.$lowval.' and '.$highval.'';
例如,分配$var4=''
,最小值将是$var1
,而不是$var4
。还可以有多个未设置或为空的变量。
您如何编辑上面的脚本来完成它?
答案 0 :(得分:2)
如果您使用array_filter
显示计数,则可以在最小值/最大值之前使用它。代码应如下:
<?php
$var1 = '17';
$var2 = '19';
$var3 = '20';
$var4 = '1';
$var5 = '';
$arr = compact('var1', 'var2', 'var3', 'var4', 'var5'); // Stores values in array $arr
$filtered = array_filter($arr);
$highval = max($filtered);
$lowval = min($filtered);
$stores = count($filtered);
echo 'Item is available in ' . $stores . ' vars and is between ' . $lowval . ' and ' . $highval . '';
更新
最好采用数字数组并将其写为:
$arr = ['17', '19', '20', '1', ''];
$filtered = array_filter($arr);
$highval = max($filtered);
$lowval = min($filtered);
$stores = count($filtered);
echo 'Item is available in ' . $stores . ' vars and is between ' . $lowval . ' and ' . $highval . '';
答案 1 :(得分:2)
$ arr在数组中具有字符串值,因此需要转换为数字,然后您的问题才能解决。
添加一行:$arr = array_map('intval', $arr);
行以进行数字转换。
尝试一下:
$var1='17';
$var2='19';
$var3='20';
$var4='1';
$var5='';
$arr = compact('var1','var2','var3','var4','var5'); // Stores values in array $arr
$arr = array_map('intval', $arr);
$arr1 = array_filter($arr, function($a) { return ($a !== 0); }); // Remove if Array value have 0
$highval = max($arr1);
$lowval = min($arr1);
$stores=count($arr);
echo 'Item is available in '.$stores.' vars and is between '.$lowval.' and '.$highval.'';
产量:
Item is available in 4 vars and is between 1 and 20