ホームページ >バックエンド開発 >PHPチュートリアル >PHP カスタム再帰関数を実装して配列を JSON に変換する方法

PHP カスタム再帰関数を実装して配列を JSON に変換する方法

不言
不言オリジナル
2018-07-21 12:55:151521ブラウズ

この記事では、PHP のカスタム再帰関数を使用して配列を JSON に変換する関数を実装する方法を共有します。内容は非常に優れています。困っている友人は参照できます。すべての人に役立つことを願っています。

この記事の例では、配列を JSON 関数に実装するための PHP カスタム再帰関数について説明します。参考までに皆さんと共有してください。詳細は次のとおりです。

質問:

他社にインターフェースを提供する必要があるため最近のプロジェクトでは、GBK でエンコードされた json データをフィードしましたが、問題の 1 つは、PHP の json_encode 暗号化関数が utf-8 エンコードのみをサポートしていることです。これはさらに恥ずかしいことです。データは GBK エンコードされており、受信側が必要とするデータ形式も GBK エンコードされているため、最初は utf-8 エンコードに変換してから json_encode 関数を使用することを考えていました。これにより、中国語のコンテンツが文字化けしたため、最終的な方法はデータを手動で暗号化することでした。

実装:

この機能を実現するには、json データの特徴を観察することが最も重要です。概要が適切に設定されておらず、完全に完了できませんでした。 json_encode 関数の機能を実装するには、後でインターネット上の情報を参照してこの関数を実装します (再帰関数です):

function newArrayToJson($array)
{
  if(!is_array($array))
  {
    return '';
  }
  $func = __FUNCTION__;
  //关键判断是不是关联数组,以此来决定是否需要json加密key和使用[]
  $associative = (array_keys($array) !== range(0, count($array) - 1)) ? true : false;
  if($associative && !empty($array))
  {
    $construct = array();
    foreach($array as $key => $value)
    {
      $key = '"'.$key.'"';
      if(is_array($value))
      {
        $value = $func($value);
      }
      elseif(!is_numeric($value))
      {
        $value = '"'.$value.'"';
      }
      $construct[] = "$key:$value";
    }
    $result = "{".implode(",",$construct)."}";
  }
  else
  {
    $construct = array();
    foreach($array as $value)
    {
      if(is_array($value))
      {
        $value = $func($value);
      }
      else if(!is_numeric($value))
      {
        $value = '"'.$value.'"';
      }
      $construct[] = $value;
    }
    $result = "[".implode(",", $construct)."]";
  }
  return $result;
}

//测试:
$arr=array('1'=>'www.jb51.net','2'=>'www.baidu.com','3'=>'www.sina.com.cn','4'=>'脚本之家');
echo newArrayToJson($arr);
/*
运行结果:
{"1":"www.jb51.net","2":"www.baidu.com","3":"www.sina.com.cn","4":"脚本之家"}
*/

#関連する推奨事項:

#PHP でよく使用される 10 個の文字列関数の紹介と使用方法

以上がPHP カスタム再帰関数を実装して配列を JSON に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。