【发布时间】:2019-07-08 20:07:32
【问题描述】:
我有一个函数可以打乱几个数组并返回一个长数组:
function array_zip_merge() {
$output = array();
// The loop incrementer takes each array out of the loop as it gets emptied by array_shift().
for ($args = func_get_args(); count($args); $args = array_filter($args)) {
// &$arg allows array_shift() to change the original.
foreach ($args as &$arg) {
$output[] = array_shift($arg);
}
}
return $output;
}
我是这样运行的:
$visirezai = array_zip_merge($tretiRezai, $ketvirtiRezai, $sphinxorezaiclean);
问题有时是一个、两个甚至所有数组都是空的或根本没有设置,我收到这样的循环错误消息:
Notice: Undefined variable: sphinxorezaiclean in /usr/share/nginx/search.php on line 177
Warning: array_shift() expects parameter 1 to be array, boolean given in /usr/share/nginx/search.php on line 148
Warning: array_shift() expects parameter 1 to be array, boolean given in /usr/share/nginx/search.php on line 148
Warning: array_shift() expects parameter 1 to be array, null given in /usr/share/nginx/search.php on line 148
Warning: array_shift() expects parameter 1 to be array, boolean given in /usr/share/nginx/search.php on line 148
Warning: array_shift() expects parameter 1 to be array, boolean given in /usr/share/nginx/search.php on line 148
Warning: array_shift() expects parameter 1 to be array, boolean given in /usr/share/nginx/search.php on line 148
第 177 行是 $visirezai = array_zip_merge($tretiRezai, $ketvirtiRezai, $sphinxorezaiclean); 所在的位置(我知道 sphinxorezaiclean 根本没有设置,但有时是这样)和第 148 行 - 函数 array_zip_merge 所在的位置。
它会继续这样,直到我停止在浏览器中加载网页。
我解决这个问题的方法是这样的:首先我检查数组是否为空:
$ketvirtiRezai = rezultataiKeturi($q);
$tretiRezai = rezultataiTrys($q);
$ketvirtiEmpty = false;
$tretiEmpty = false;
$sphinxEmpty = false;
if (empty($ketvirtiRezai[0])) {
$ketvirtiEmpty = true;
}
if (empty($tretiRezai[0])) {
$tretiEmpty = true;
}
else {
$tretiRezai = array_slice($tretiRezai, 0, 5);
}
if (isset($sphinxorezai) && !empty($sphinxorezai)) {
$sphinxorezaiclean = array_slice($sphinxorezai, 0, 5);
}
else
{
$sphinxEmpty = true;
}
然后我可以通过检查每个数组的真或假并相应地设置array_zip_merge 函数来执行超长 if elseif 循环。
有没有更好的方法来添加/删除数组到 array_zip_merge 函数。例如,如果 $ketvirtiRezai 是空的,函数应该只包含 $visirezai = array_zip_merge($tretiRezai, $sphinxorezaiclean); 如果所有数组都是空的,那么 $visirezai 应该设置为空并且函数根本不运行(我猜这个很容易)。如果两个数组中的一个不是空的,$visirezai 应该被设置为一个不为空的。
我是 PHP 新手,很抱歉我的代码乱七八糟。
【问题讨论】: