Php 检查所有数组项是否为空
我正在从表单中添加一个项目数组,如果所有项目都为空,我希望执行一些验证并添加到错误字符串中。因此,我:Php 检查所有数组项是否为空,php,arrays,validation,Php,Arrays,Validation,我正在从表单中添加一个项目数组,如果所有项目都为空,我希望执行一些验证并添加到错误字符串中。因此,我: $array = array( 'RequestID' => $_POST["RequestID"], 'ClientName' => $_POST["ClientName"], 'Username' => $_POST["Username"], 'RequestAssignee' => $_POST[
$array = array(
'RequestID' => $_POST["RequestID"],
'ClientName' => $_POST["ClientName"],
'Username' => $_POST["Username"],
'RequestAssignee' => $_POST["RequestAssignee"],
'Status' => $_POST["Status"],
'Priority' => $_POST["Priority"]
);
然后,如果所有数组元素都为空,则执行:
$error_str .= '<li>Please enter a value into at least one of the fields regarding the request you are searching for.</li>';
$error\u str.='请在至少一个字段中输入一个与您正在搜索的请求相关的值。 ';
未测试,但您得到逻辑:)
$error=0;
foreach($k=>v的数组){
如果(空($v)){
$error++;
}
}
如果($error==count($array)){
$error_str.='请在至少一个字段中输入一个与您正在搜索的请求相关的值。 ';
}
您对$array的定义不正确,并且带有单引号。应改为:
$array = array( 'RequestID' => $_POST["RequestID"],
'ClientName' => $_POST["ClientName"],
'Username' => $_POST["Username"],
'RequestAssignee' => $_POST["RequestAssignee"],
'Status' => $_POST["Status"],
'Priority' => $_POST["Priority"] );
使用空胶水内爆数组并检查结果字符串的大小:
<?php if (strlen(implode($array)) == 0) echo 'all values of $array are empty'; ?>
你并不真的需要它。
您将分别验证这些字段,通过完成此过程,您可以判断数组是否为空(或是否包含无效值,两者相同)您可以使用内置的 如果未提供回调,则将删除所有等于FALSE的输入项(请参见转换为布尔值) 因此,我们可以用一句简单的话来做到这一点
if(!array_filter($array)) {
echo '<li>Please enter a value into at least one of the fields regarding the request you are searching for.</li>';
}
if(!array_filter($array)){
echo“请在至少一个字段中输入一个与您正在搜索的请求相关的值。 ”;
}
这很简单:
foreach($array as $k => $v)
{
if(empty($v))
{
unset($array[$k]);
}
}
$show_error = count($array) == 0;
您还必须将数组值的封装更改为双引号。这是一个较老的问题,但我想我会加入我的解决方案,因为上面没有列出它
function isArrayEmpty($array) {
foreach($array as $key => $val) {
if ($val !== '')
return false;
}
return true;
}
我有同样的问题,但想分别检查数组中的每个元素,看看哪个元素是空的。这比预期的要困难,因为需要在单独的数组中创建键值和实际值,以检查和响应空数组元素
print_r($requestDecoded);
$arrayValues = array_values($requestDecoded); //Create array of values
$arrayKeys = array_keys($requestDecoded); //Create array of keys to count
$count = count($arrayKeys);
for($i = 0; $i < $count; $i++){
if ( empty ($arrayValues[$i] ) ) { //Check which value is empty
echo $arrayKeys[$i]. " can't be empty.\r\n";
}
}
数量不能为空。简化使用方法:
$array = []; //target array
$is_empty = true; //flag
foreach ($array as $key => $value) {
if ($value != '')
$is_empty = false;
}
if ($is_empty)
echo 'array is empty!';
else
echo 'array is not empty!';
有趣!我想知道这是否比内爆阵列快。@Capsule对于大小为6的阵列,即使你花了一生的时间检查阵列,你也永远看不到丝毫的差异。对于超过1000个的大小,我建议根本不要使用数组。因为我们谈论的是网站,所以你必须将每个访问者的数量乘以。一个1000或100个访问者的数组计算一个10的数组在CPU成本方面是相同的。您无法决定停止使用阵列,因为您的网站正在获得一些人气;-)我很想知道这是否比我建议的内爆方法快。@dogmatic69已经提到了关于?
array\u filter()
的任何基准测试。关于性能-我相信simpleforeach
应该比array\u filter()
和Introde()
@xzyfer都要快,if(introde($array))echo“…”
会打印“…”,即使一个数组元素是(string)“0”
。关于foreach
比array\u filter()慢-确定吗?一个接一个地删除数组元素比仅仅读取数组元素要快多少?@xzyfer,我做了一些测试——使用array\u filter()
检查是否填充了任何值,这比使用一些布尔变量存储结果和break
第一个无效值的基本foreach
循环至少慢几倍。即使array\u filter()
是一个“本机PHP函数”,它也不能比foreach
更快,因为它必须创建新的数组变量。我投了赞成票,但我还是有点惊讶,这实际上被接受了,因为它没有满足要求,不是吗?如果你说,requestID=0
和status=0
,当有明确的值时,这将导致“请输入一个值”。他不需要数字。他想知道,如果所有元素都是空的,没有数字,只有一个布尔值。我想Col.粗鲁地说,在PHP中,count($array)==0
和count($array)
都计算为真,因此额外的比较和赋值步骤是不必要的。虽然赋值在php中花费很少。啊,是的,这并没有很大的区别,但我更愿意大部分时间使用布尔值,我不明白为什么反对票是可行的,这是一种可行的方法,并为他创建所需的结果。要说数组是否为空,只找到一个填充的元素就足够了。它被称为逻辑。您可以删除strlen
调用以提高效率<代码>如果(内爆($array))回显“..”
@binaryLV,如何?同意他们都没能解决这个问题。但是它们是不等价的,不是吗?@xzyfer,如果$str
是(string)'0'
,那么strlen($str)==0
计算为假,而$str
evaluation为true
,因此strlen($str)==0
不能替换为$str
。与使用array\u filter
相比,此解决方案感觉更正确,因为array\u filter
旨在与回调一起使用,以过滤数组。但你要做的就是检查“空”。所以你把它做成一串,然后检查它的长度。Brilliant@kasimirarray\u filter
的回调函数是可选的,手册中明确指出,如果没有提供回调函数,则所有等于FALSE的输入项(请参见转换为布尔值)都将被删除。因此,使用array\u filter
的正确性不亚于此,它只是一种不同的方法;-)你可以用任何一种。双引号实际上稍微慢一点。@AaronHarun。看看问题的原始版本,其中有奇怪的错误引语。这就是说,这纠正了这一点,但并没有试图真正回答问题本身。对于任何阅读本文感到困惑的人,不要将$_帖子用单引号括起来–它不会被评估!我擅自编辑了这些引文。(不是我的道琼斯指数。)
Array
(
[PONumber] => F12345
[CompanyName] => Test
[CompanyNum] => 222222
[ProductName] => Test
[Quantity] =>
[Manufacturer] => Test
)
$array = []; //target array
$is_empty = true; //flag
foreach ($array as $key => $value) {
if ($value != '')
$is_empty = false;
}
if ($is_empty)
echo 'array is empty!';
else
echo 'array is not empty!';