所以我有一个while循环,我在$array_collections
里面给了每个循环35个值,如果它等于NULL
,我想验证每个值然后给它一个空字符串。我做到了:
while ($array_collections = tep_db_fetch_array($query)) {
foreach ($array_collections as $key => $value) {
if (is_null($value)) {
$array_collections[$key] = "";
}
}
$docs[] = new \Elastica\Document('', \Glam\HttpUtils::jsonEncode(
array(
'X' => $array_collections['X'],
... etc
)));
}
这在技术上应该可以工作,但循环超过500K元素,因此它很大,而且对于我们将它放入表中的每个元素,问题是我在某些时候耗尽了内存。那么是否有另一种简单的方法可以为任何给定的NULL
值提供一个没有循环的空字符串?
答案 0 :(得分:1)
好吧,你可以把空字符串的NOT NULL约束作为DEFAULT值放在DB中,这样你就不需要在php中使用循环来做到这一点,但是如果你不想改变数据库设计那么你可以使用COALESCE你的查询
select COALESCE(yourfield,'') from table
它会将NULL值转换为空字符串
答案 1 :(得分:0)
您可以使用array_map
函数将空值替换为空字符串。
$array_collections=array_map(function($ar)
{
if(isset($ar) && $ar!=null){
return $ar;
}
return '';
},$array_collections);
上面的代码将所有空值替换为空字符串。不需要循环。
答案 2 :(得分:0)
你可以使用array_walk:
function replace_null(&$lsValue, $key) {
if(is_null($lsValue)) {
$lsValue = "";
}
}
array_walk($array_collections, 'replace_null');