我有一个来自表单的变量集,并且由于原始开发人员设计不佳,表单将提交空表单元素值为''(空单引号),这会对某些查询造成严重破坏我必须写,因为函数将其视为值。我编写了一个函数来将''的任何实例设置为false,主要是因为只捕获值是否为false是不起作用的。为了深入挖掘嵌套数组,我重新编写了递归函数。
function validateVars($vars){
foreach($vars as $k => $v){
is_array($k) ? validateVars($k) : $vars[$k] = ($v == '' ? FALSE : $v);
}
return $vars;
}
问题是,它将所有索引设置为''作为值应该为false,但它实际上并没有进入数组来设置它们的值。这是一个示例转储:
array(14) {
["title"]=> string(3) "JLR"
["issue"]=> array(3) {
["jobs"]=> string(11) "66055,66056"
["Ids"]=> string(0) ""
["DateRange"]=> string(0) "" }
["article"]=> array(2) {
["Jobs"]=> string(0) ""
["Ids"]=> string(0) "" }
["issueDateFields"]=> string(11) "DateCreated"
["articleDateRange"]=> bool(false)
["articleDateFields"]=> string(11) "DateCreated"
["AdsJobs"]=> bool(false)
["FMBMJobs"]=> bool(false)
["AdsIds"]=> bool(false)
["FMBMIds"]=> bool(false)
["adsDateRange"]=> bool(false)
["adsDateFields"]=> string(11) "DateCreated"
["fmbmDateRange"]=> bool(false)
["fmbmssueDateFields"]=> string(11) "DateCreated"
}
答案 0 :(得分:2)
需要这样:
function validateVars(array $vars){
foreach ($vars as &$value) {
if (is_array($value)) {
$value = validateVars($value);
} else if ($value == '') {
$value = false;
}
}
return $vars;
}
如果你喜欢单行,至少要做好。 ;)
function validateVars(array $vars) {
return array_map(
function ($v) {
return is_array($v) ? validateVars($v) : ($v == '' ? false : $v);
},
$vars
);
}
答案 1 :(得分:0)
您似乎正在将数组密钥传递给is_array()
,这将始终评估为false。
此外,您正在更改本地$ vars变量但未使用输出:
$vars = [];//this is your array
$vars = validateVars($vars);
function validateVars($myVars){
foreach($myVars as $k => $v){
is_array($v) ? $myVars[$k] = validateVars($v) : $myVars[$k] = ($v == '' ? FALSE : $v);
}
return $myVars;
}
哪会修改你的初始数组。