2012-02-12 14 views
1

$outputが文字列の場合、以下の方法は完全に機能します。まれに、$outputは配列として渡すことができます。PHP配列をチェックし、この配列の最後の項目のみを使用する

$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は Cで与えられた文字列、配列ことを期待:ライン16上のOutput.php \ \ WAMP \ WWW \ CMS \ Webアプリケーション\ライブラリ

警告:のinclude_once(Output.php)function.includeワンス]: ストリームを開くことに失敗していない: Cにおけるようなファイルまたはディレクトリなしに:\ WAMP \ PHPの\は、ライン146上の\ Zendの\ Loader.phpを含みます

のvar_dump($出力)

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

答えて

1

PHPのis_array()関数を使用できるはずです。次のようなことをする必要があります。 $出力が配列の場合

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

このコードはチェックして、それがあれば、それは配列の最後の要素にする$出力を設定します。それ以外の場合は、変更されません。

あなたは以下のリンクで)(IS_ARRAY詳細を読むことができます:

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

EDIT:誰かが答えに私を打つようが見えるが、私は最後()関数を使用しないことをお勧めしますここに。関数を呼び出すコードが配列を変更しないと予想される場合、予期しない結果になる可能性があります。

+0

"関数を呼び出すコードが配列を変更しないと予期しない結果になることがあります。" - 配列は参照として渡されないため、発生しません。 – VolkerK

+0

ええ、あなたは正しいです。何らかの理由で、私は配列とオブジェクトの両方が参照渡しされたと考えましたが、明らかに配列については間違っていました。 – itsananderson

0

を参照してください。これに

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

if(is_array($output)) 
    $outout= $output[count($outout)-1]; 
$outtype = ucfirst(strtolower(str_replace(".","_",$output))); 
関連する問題