便利な関数
こんにちはー。システム課の島田です。
CakePHPで開発するときにデータのやり取りで配列かバリューオブジェクトを扱
うことが多々あります。
配列を扱うとき指定したキーが無いと「Notice: Undefined index」でますよね。
あまりコード的によろしくないので、isset()で調べたりすると思います。
無難にコード書くとしたらこんな感じですね。
$value = null;
if(isset($data[$key])){
$value = $data[$key];
}
三項演算
$value = isset($data[$key])?$data[$key]:null;
これって項目がいくつもあるとDRYじゃないですよね。
なので僕は自前で関数を使用してます。
ざっくり要件としては
・指定したキーがあったらその値を返す
・多段階配列
です。
Code:
function getArrayValue($data,$path,$defaultReturn = null){
if(!is_array($data) and !is_object($data)){
return $defaultReturn;
}
if(is_string($path)){
$path = explode('.',$path);
}
foreach($path as $key=>$value){
if(is_array($data)){
if(isset($data[$value])){
$data = $data[$value];
if($key === count($path) - 1){
return $data;
}
}
}elseif(is_object($data)){
if(isset($data->{$value})){
$data = $data->{$value};
if($key === count($path) - 1){
return $data;
}
}
}
}
return $defaultReturn;
}
使い方:
階層を「.」で区切ってpathに渡す。です。
$data = array(
'1'=>array(
'A'=>'1-A',
'B'=>'1-B'
),
'hoge'=>array(
'fuga'=>'hoge-fuga'
)
);
var_dump(getArrayValue($data,'1.A'));
→string(3) "1-A"
var_dump(getArrayValue($data,'3'));
→NULL
var_dump(getArrayValue($data,'1.C',false));
→bool(false)
※キー自体に「.」が含まれると想定しない動作になるので注意が必要です。
noticeは0を目指しましょうー。