PHP检查数组是否只使用此数组中的最后一项

时间:2012-02-12 08:51:10

标签: php

如果$output是一个字符串,则下面的方法可以很好地工作。虽然在极少数情况下$output可以作为数组传递。

如何检查$output是否为数组并且仅获取数组的最后部分。

/**
 * Output writer.
 *
 * @param string $output
 * @param Controller $oController
 * @throws Output_Exception
 */
public static function factory($output,Controller $oController) {       

    $outtype =  ucfirst(strtolower(str_replace(".","_",$output)));
    $classname = __CLASS__ . "_" . $outtype;

    try {

        Zend_Loader::loadClass($classname);
        $oOutputter = new $classname($oController);

        if(! $oOutputter instanceof Output_Abstract )
            throw new Output_Exception("class $classname is not an instance of Output_Abstract");

    } catch (Zend_Exception $e) {               
        throw $e;
    }

    return $oOutputter;
}

错误:

  

警告:strtolower()期望参数1为字符串,数组为   第16行的C:\ wamp \ www \ cms \ webapp \ library \ Output.php

     

警告:include_once(Output.php)[function.include-once]:   无法打开流:没有这样的文件或目录   第146行的C:\ wamp \ php \ includes \ Zend \ Loader.php

的var_dump($输出)

array(2) { [0]=> string(6) "xml" [1]=> string(6) "smarty" } 

3 个答案:

答案 0 :(得分:4)

if ( is_array($output) ) {
   $output= end($output);
}


http://docs.php.net/is_array
http://docs.php.net/function.end

答案 1 :(得分:1)

您应该能够使用PHP的is_array()函数。像下面这样的东西应该这样做。

<?php
//...
$output = is_array($output) ? $output[count($output)-1] : $output;
//...
?>

此片段将检查$ output是否为数组,如果是,则将$ output设置为数组中的最后一个元素。否则,它将保持不变。

您可以在以下链接中阅读有关is_array()的更多信息:

http://www.php.net/manual/en/function.is-array.php

编辑:看起来有人打我一个答案,但我建议不要在这里使用end()函数。如果调用函数的代码希望数组不被修改,那么这样做可能会产生意外结果。

答案 2 :(得分:0)

尝试更改此内容:

$outtype =  ucfirst(strtolower(str_replace(".","_",$output)));

到此:

if(is_array($output))
    $outout= $output[count($outout)-1];
$outtype =  ucfirst(strtolower(str_replace(".","_",$output)));