如果$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" }
答案 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)));