2016-07-25 27 views
0

PHPでは、多次元配列を関数のパラメータとして入力することは可能ですか?もちろんPHP多次元配列型のヒント関数のパラメータ

次のような単一のアレイをヒント入力することができます。

function Example(array $parameter) {} 

しかし、関数は多次元配列のようにパラメータが必要な場合は、タイプヒンティングを介してこれを強制する方法はありますか?

+0

PHPは、JavaやC#と同じように強く型付けされていません。そのため、PHPでは 'mixed 'のような概念があります。だからPHPはあなたの配列が倍精度文字列か文字列か 'mixed'だけを含む必要があるかどうか気にしませんが、もしあなたがその機能を必要とするならあなた自身でチェック*を実装することができます。それを模倣する1つの方法は、おそらくクラスを作成することです: 'DoubleArray'おそらくタイプヒントのためにそれを使用してください... – Poiz

+2

そして二倍であなたは多次元を意味するのですか、値は倍(浮動小数点数)ですか? – AbraCadaver

+0

@AbraCadaver多次元配列、申し訳ありませんが、そのことを明確にするために質問を更新します –

答えて

1

DoubleArrayであれば、ダブルスの配列(浮動小数点数)のみを意味します。次に、カスタムクラスを使用して偽装することができます。以下のコードを検討してください。 DoubleArrayであなたは次に示すように、あなたがまだ偽それがカスタムクラスを使用することができ、Multidimensional Arraysを意味している場合、しかし、

<?php 

    class DoubleArray{ 
     protected $instance; 
     public function __construct(array $arrDoubles) { 
      foreach($arrDoubles as $key=>$double) { 
       if(!is_double($double)){ 
        unset($arrDoubles[$key]); 
       } 
      } 
      $this->instance = array_values($arrDoubles); 
     } 

     public function push($numDouble){ 
      $this->instance[] = $numDouble; 
     } 

     public function get(){ 
      return $this->instance; 
     } 
    } 

    $arr = array(2.35, 72.9, 88.45, 42.76, "No...", 57.77, "String is not Double"); 
    $da  = new DoubleArray($arr); 

    var_dump(getData($da)); 


    function getData(DoubleArray $data){ 
     // ALL ARRAY FUNCTIONS STILL APPLY TO THE $doubleArray VARIABLE 
     // HOWEVER TO GET THE CUSTOM DOUBLE ARRAY DATA, YOU MAY HAVE TO 
     // JUST CALL THE get() METHOD ON THE DoubleArray INSTANCE: $data 
     $doubleArray = $data->get(); 
     return $doubleArray; 
    } 

    // THE var_dump(getData($da); ABOVE PRODUCES: 
    array (size=5) 
     0 => float 2.35 
     1 => float 72.93 
     2 => float 88.45 
     3 => float 42.76 
     4 => float 57.77 
:最初の配列は stringsが含まれていますが、最終的な結果ではないがないことに注意してください。
<?php 

    class DoubleArray{ 
     protected $instance; 

     public function __construct(array $arrMDDoubles) { 
      foreach($arrMDDoubles as $key=>$subArray) { 
       if(!is_array($subArray)){ 
        throw new Exception("DoubleArray accepts only Multidimensional Arrays..."); 
       } 
      } 
      $this->instance = $arrMDDoubles; 
     } 

     public function push($arrArray, $key=null){ 
      if(!is_array($arrArray)){ 
       throw new Exception("You can only Push an Array..."); 
      } 
      if(!is_null($key)){ 
       $this->instance[$key] = $arrArray; 
      }else{ 
       $this->instance[]  = $arrArray; 
      } 
      return $this; 
     } 

     public function get(){ 
      return $this->instance; 
     } 
    } 

    $arr = array(array(2.35, 72.93,), array(88.45, 42.76), array("No...", 57.77, "String is not Double")); 
    $da  = new DoubleArray($arr); 

    var_dump(getData($da)); 


    function getData(DoubleArray $data){ 
     // ALL ARRAY FUNCTIONS STILL APPLY TO THE $doubleArray VARIABLE 
     // HOWEVER TO GET THE CUSTOM DOUBLE ARRAY DATA, YOU MAY HAVE TO 
     // JUST CALL THE get() METHOD ON THE DoubleArray INSTANCE: $data 
     $doubleArray = $data->get(); 
     return $doubleArray; 
    } 

    // THIS TIME THE THE var_dump(getData($da) ABOVE WOULD THROW AN EXCEPTION 
    // IF THE GIVEN ARRAY IS NOT MULTI-DIMENSIONAL BUT PRODUCE SOMETHING 
    // LIKE THIS OTHERWISE:  
    array (size=3) 
     0 => 
     array (size=2) 
      0 => float 2.35 
      1 => float 72.93 
     1 => 
     array (size=2) 
      0 => float 88.45 
      1 => float 42.76 
     2 => 
     array (size=3) 
      0 => string 'No...' (length=5) 
      1 => float 57.77 
      2 => string 'String is not Double' (length=20) 
+0

間違いなく多次元配列を意味しましたが、クラスを使用してパラメータの型を強制することは考えていませんでした。 –

+1

'multidimensional-array'タグが最初からありました。 – revo

+0

@revoそして、AbraCadaverのようなマスターでさえ、尋ねられました:*二重では多次元を意味するか、値は二重になりますか?*あなたも彼にそれも知らせますか? – Poiz