PHP - (2008/05/21 (水) 12:49:16) の編集履歴(バックアップ)
Tips
ユーザ関数の引数を参照渡しで呼び出す
call_user_func では引数を参照渡しできない。
なので、call_user_func_arrayの第二引数へ参照を含む配列を渡す。
function bbb(&$str)
{
$str = 'bbb';
}
$str = 'aaa';
call_user_func('bbb', $str);
echo $str; // aaa : call_user_funcは参照を引数に取れない
call_user_func_array('bbb', array($str));
echo $str; // aaa : 参照の配列を渡していない
call_user_func_array('bbb', array(&$str));
echo $str; // bbb : OK
連想配列と配列を区別する
function is_assoc($array) {
return array_keys($array) !== range(0, count($array)-1);
}
マルチバイト対応 json_encode
function mb_json_encode($value) {
if(is_array($value)) {
if(is_assoc($value)) {
$ret = array();
foreach($value as $k=>$v) {
$ret[] = mb_json_encode($k).':'.mb_json_encode($v);
}
$ret = '{'.implode(',', $ret).'}';
} else {
$ret = array();
foreach($value as $v) {
$ret[] = mb_json_encode($v);
}
$ret = '['.implode(',', $ret).']';
}
} else if(is_object($value)) {
$ret = mb_json_encode(get_object_vars($value));
} else if(is_string($value)) {
$ret = '"'.str_replace('"', '\\"', $value).'"';
} else {
$ret = json_encode($value);
}
return $ret;
}