「PHP」の編集履歴(バックアップ)一覧に戻る

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;
}
目安箱バナー