PHPでは、多次元配列を関数のパラメータとして入力することは可能ですか?もちろんPHP多次元配列型のヒント関数のパラメータ
次のような単一のアレイをヒント入力することができます。
function Example(array $parameter) {}
しかし、関数は多次元配列のようにパラメータが必要な場合は、タイプヒンティングを介してこれを強制する方法はありますか?
PHPでは、多次元配列を関数のパラメータとして入力することは可能ですか?もちろんPHP多次元配列型のヒント関数のパラメータ
次のような単一のアレイをヒント入力することができます。
function Example(array $parameter) {}
しかし、関数は多次元配列のようにパラメータが必要な場合は、タイプヒンティングを介してこれを強制する方法はありますか?
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)
PHPは、JavaやC#と同じように強く型付けされていません。そのため、PHPでは 'mixed 'のような概念があります。だからPHPはあなたの配列が倍精度文字列か文字列か 'mixed'だけを含む必要があるかどうか気にしませんが、もしあなたがその機能を必要とするならあなた自身でチェック*を実装することができます。それを模倣する1つの方法は、おそらくクラスを作成することです: 'DoubleArray'おそらくタイプヒントのためにそれを使用してください... – Poiz
そして二倍であなたは多次元を意味するのですか、値は倍(浮動小数点数)ですか? – AbraCadaver
@AbraCadaver多次元配列、申し訳ありませんが、そのことを明確にするために質問を更新します –