将 print_r 对象字符串数组转换为 php 中的 json

Aru*_*ain 1 php

我的一位团队成员已将该对象保存在 Mysql 数据库中。我需要提取对象属性值。当我尝试使用 PHP 从 Mysql 获取它时,我将其作为字符串获取。除了使用 PHP 函数的想法之外,无法直接访问该属性substr()

是否有任何选项可以将数据库中保存的以下字符串再次转换为对象,以便我可以访问它的属性。

stdClass Object
(
[status] => 0
[environment] => Sandbox
[receipt] => stdClass Object
    (
        [quantity] => 1
        [expires_date] => 2017-04-18 08:56:57 Etc/GMT
        [is_trial_period] => false
        [purchase_date] => 2017-04-18 08:51:57 Etc/GMT
        [product_id] => com.1monthAuto.baseball
        [original_purchase_date_pst] => 2017-04-18 01:51:58 America/Los_Angeles
        [original_purchase_date_ms] => 1492505518000
        [web_order_line_item_id] => 1000000034854560
        [original_purchase_date] => 2017-04-18 08:51:58 Etc/GMT
    )

[latest_receipt] => MIIT6wYJKoZIhvcNAQcCoIIT3DCCE9gC
)
Run Code Online (Sandbox Code Playgroud)

Sah*_*ati 5

试试这个希望这会对你有所帮助。

正则表达式: /latest_receipt\]\s*=>\s*\K[^\s\)]+/

latest_receipt\]\s*=>\s*这将匹配latest_receipt]spaces=>spaces

\K将重置上一场比赛

[^\s\)]+这将匹配除 space( \s) 之外的所有内容)

在这里尝试这个代码片段

<?php

ini_set('display_errors', 1);
$string='stdClass Object
(
[status] => 0
[environment] => Sandbox
[receipt] => stdClass Object
    (
        [quantity] => 1
        [expires_date] => 2017-04-18 08:56:57 Etc/GMT
        [is_trial_period] => false
        [purchase_date] => 2017-04-18 08:51:57 Etc/GMT
        [product_id] => com.1monthAuto.baseball
        [original_purchase_date_pst] => 2017-04-18 01:51:58 America/Los_Angeles
        [original_purchase_date_ms] => 1492505518000
        [web_order_line_item_id] => 1000000034854560
        [original_purchase_date] => 2017-04-18 08:51:58 Etc/GMT
    )

[latest_receipt] => MIIT6wYJKoZIhvcNAQcCoIIT3DCCE9gC
)';
preg_match("/latest_receipt\]\s*=>\s*\K[^\s\)]+/", $string,$matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)

解决方案 2: 或者您可以尝试这个库 //这个解决方案将转换print_rjson, 并且肯定可以工作。

在这里尝试这个代码片段(Copy paste below code and check)

<?php
ini_set('display_errors', 1);
/**
 * @author Sahil Gulati <sahil.gulati1991@outlook.com> 
 */
echo printr_source_to_json(
        print_r(
                array("Name"=>"Sahil Gulati",
                      "Education"=>array(
                          "From"=>array(
                              "DU"=>array(
                                  "Course"=>"B.Sc. (Hons.) Computer Science.")
                              )
                          )
                    )
                , true
                )
        );
/**
 * This function will convert output string of `print_r($array)` to `json string`
 * @note Exceptions are always there i tried myself best to get it done. Here $array can be array of arrays or arrays of objects or both
 * @param String $string This will contain the output of `print_r($array)` (which user will get from ctrl+u of browser),
 * @return String
 */
function printr_source_to_json($string)
{
    /**
     *replacing `stdClass Objects (` to  `{`
     */
    $string = preg_replace("/stdClass Object\s*\(/s", '{  ', $string);

    /**
     *replacing `Array (` to  `{`
     */
    $string = preg_replace("/Array\s*\(/s", '{  ', $string);
    /**
     *replacing `)\n` to  `},\n`
     * @note This might append , at the last of string as well 
     * which we will trim later on.
     */
    $string = preg_replace("/\)\n/", "},\n", $string);

    /**
     *replacing `)` to  `}` at the last of string
     */
    $string = preg_replace("/\)$/", '}', $string);
    /**
     *replacing `[ somevalue ]` to "somevalue"
     */
    $string = preg_replace("/\[\s*([^\s\]]+)\s*\](?=\s*\=>)/", '"\1" ', $string);
    /**
     * replacing `=> {`  to `: {`
     */
    $string = preg_replace("/=>\s*{/", ': {', $string);
    /**
     * replacing empty last values of array special case `=> \n }` to : "" \n
     */
    $string = preg_replace("/=>\s*[\n\s]*\}/s", ":\"\"\n}", $string);

    /**
     * replacing `=> somevalue`  to `: "somevalue",` 
     */
    $string = preg_replace("/=>\s*([^\n\"]*)/", ':"\1",', $string);
    /**
     * replacing last mistakes `, }` to `}` 
     */
    $string = preg_replace("/,\s*}/s", '}', $string);
    /**
     * replacing `} ,` at the end to `}`
     */
    return $string = preg_replace("/}\s*,$/s", '}', $string);
}
Run Code Online (Sandbox Code Playgroud)