Implode数组格式化,然后重新打包为数组返回

时间:2013-08-04 23:57:25

标签: php arrays

/** 
 * Makes directories if they do not exist
 * 
 * @param array $dirs array of directories
 * @return bool if TRUE and error array if FALSE
 *
 */
function mkdir_if_not_exist($dirs) {
    $err = array();
    if (is_array($dirs)) {
        foreach ($dirs as $dir) {
            if (!is_dir($dir)) {
                if (!mkdir($dir)) {
                    $err[] = "Directory {$dir} could not be created.";
                }
            }
        }
        if (count($err) > 1) {
            $err = implode('<br>', $err);
            count($err) > 2 ? $err .= 'Check if you have permission to make folders on the server' : '';
            $err = explode($err);           
        }
    } else {
        trigger_error('Array is required for function ' . __FUNCTION__, E_USER_ERROR);
    }
    if (!empty($err)) {
        // return errory array
        return $err;
    } else {
        return TRUE;
    }
}

这是我编写的一个简单函数,用于获取目录数组并检查它们是否存在,如果没有则创建它们,如果在创建它们时出现问题则添加错误。如果有多个目录“不可制作”,我希望能够在值之间添加换行符,如果有超过2个错误,我想添加一条额外的消息。并将其重新打包为数组。我一直在犯错误,我不确定我做错了什么。

我计划以下列方式访问它:

$dir = array('this', 'that');
$out = mkdir_if_not_exist($dir);
if (is_bool($out)) {
  echo 'success'
} else {
  // output array
  echo implode('', $out);
}

更新:

    if (count($err) > 1) {
        $err = implode('<br>', $err);
        $err = explode('<br>', $err);
        $err = array_push($err, 'Check if you have permission to make folders on the server');
    }

2 个答案:

答案 0 :(得分:0)

为什么不使用mkdir(dirname, premissons, recursive)

抱歉,我已经理解了 - 你的explode()缺少论据。

删除内爆并在mkdir _...()中爆炸并在echo上内爆数组

if (count($err) > 2)
    $err[] = 'Check if you have permission to make folders on the server';

答案 1 :(得分:-1)

我立刻看到的一个问题是,在你为implode()函数分配$ err字符串值后,你正在做count($err) > 2 ?。如果您想要计算是否有超过2个错误不是您正在获得的错误。字符串上的count()将始终返回1.

我真的不明白你为什么要将$ err内爆到一个字符串然后转过来然后将它爆炸回一个数组。如果函数的目的是在出现问题时返回错误数组,则调用代码的作用应该是决定如何格式化生成的错误数组以显示给用户,而不是试图强制格式化为功能本身。

但是如果你确实想要在数据中使用html格式,我想在创建错误时只需添加新标签就可以了:

$err[] = "Directory {$dir} could not be created.<br />";

然后执行:{/ p>而不是if (count($err) > 1) {

if (count($err) > 2) {
  $err[] = 'Check if you have permission to make folders on the server';          
}