hkhome 2017-2-10 16:22
etc({"Data":"\a1\b1\b4647\b0\b84\b30\a1\b1\b10689\b10689\b85\b900\a1\b1\b5634\b0\b85\b800"});
output
1 1 4647 0 84 301 1 10689 10689 85 9001 1 5634 0 85 800
請問各位,如果我想用PHP 讀到data裏面既資料,應該怎做?
謝謝各位
arthursml 2017-2-10 22:46
先用SPLIT 分 "\"
[url]http://php.net/manual/en/function.split.php[/url]
再用preg_match_all
[url]http://stackoverflow.com/questions/6278296/extract-numbers-from-a-string[/url]
form5 2017-2-10 23:13
interesting :lol
>>>
>>>
>>> s = r"\a1\b1\b4647\b0\b84\b30\a1\b1\b10689\b10689\b85\b900\a1\b1\b5634\b0\b85\b800"
>>> ''.join([ c for c in s if c not in ('\\', 'a') ]).replace('b', ' ')
'1 1 4647 0 84 301 1 10689 10689 85 9001 1 5634 0 85 800'
>>>
marlin12 2017-2-11 08:18
咁會唔會再好啲[code]<!--?php
$json = '{"Data":"\a1\b1\b4647\b0\b84\b30\a1\b1\b10689\b10689\b85\b900\a1\b1\b5634\b0\b85\b800"}';
//replace unacceptable char \
$json = str_replace('\\', ",", $json);
//echo $json;
$data = json_decode($json);
$result = str_replace(array(',a', ',b'), ' ', $data->{'Data'});
$resultArray = explode(' ', $result);
foreach($resultArray as $entry) {
echo $entry . ' ';
}
?>[/code]
marlin12 2017-2-11 08:53
仲有一個嗱喳招[code]<!--?php
$input = 'etc({"Data":"\a1\b1\b4647\b0\b84\b30\a1\b1\b10689\b10689\b85\b900\a1\b1\b5634\b0\b85\b800"});';
preg_match_all( '!\d+!', $input, $result );
foreach( $result[0] as $entry ) {
echo $entry . ' ';
}
?>[/code]
hkhome 2017-2-11 11:28
嘩,好多謝各位師傳回復,我消化下先。
真係好感謝各位
hkhome 2017-2-11 12:23
因我PHP無json,所以只能用marlin12師兄方法。
想請教下!\d+!係咩意思?
因為我用
<!--?php
$input = 'etc({"Data":"\a1\b1\b4647\b0\b84\b30\a1\b1\b10689\b10689\b85\b900\a1\b1\b5634\b0\b85\b800"});';
preg_match_all( '!\d+!', $input, $result );
foreach( $result[0] as $entry ) {
echo $entry . ' ';
}
?>
是可以OUPUT出來,但有些數值如45.8,就只能出到45,450/1557就只能出到450。
再次感謝各位
marlin12 2017-2-11 13:33
[quote]原帖由 [i]hkhome[/i] 於 2017-2-11 12:23 PM 發表 [url=http://computer.discuss.com.hk/redirect.php?goto=findpost&pid=456199124&ptid=26437155][img]http://computer.discuss.com.hk/images/common/back.gif[/img][/url]
因我PHP無json,所以只能用marlin12師兄方法。
想請教下!\d+!係咩意思? ... [/quote]
!\d+! 係一句regular expression,意思係抽取>=1個連續既數字。
如果除咗整數外,仲要攞埋分數、點數,你可以試吓下面個方法。但係咁樣(乜都唔理)抽資料,有些少變化都會錯,你考慮清楚用唔用。:smile_41:[code]<!--?php
$input = 'etc({"Data":"\a1\b1\b4647\b0\b84\b30.5\a1\b1\b106/89\b10689\b85\b900\a1\b1\b5634\b0\b85\b800"});';
preg_match_all( '!(\d+\.\d+)|(\d+\/\d+)|(\d+)!', $input, $result );
foreach( $result[0] as $entry ) {
echo $entry . ' ';
}
?>[/code]
hkhome 2017-2-11 17:03
marlin12兄,我用preg_match_all( '!(\d+\.\d+)|(\d+)!', $resultdata, $pieces );,經已順利OUTPUT到,謝謝你的幫忙。
多謝其餘師兄的教導。