我的一位团队成员已将该对象保存在 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)
试试这个希望这会对你有所帮助。
正则表达式: /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_r为json, 并且肯定可以工作。
在这里尝试这个代码片段(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)
| 归档时间: |
|
| 查看次数: |
5134 次 |
| 最近记录: |