1

编辑:完全解析数组(它包含未解析的 JSON!)

array(22) {
  [0]=>
array(4) {
["responseData"]=>
array(1) {
  ["translatedText"]=>
  string(163) "21558299 this is the text that i want to end up with, excluding the id number at the start of the string"
}
["responseDetails"]=>
string(0) ""
["responseStatus"]=>
int(200)

我要搜索的字符串是 2155.. 并且 IFF 它存在,我想获取它之后的字符串... 我该怎么做?非常感谢任何帮助!(或者更好的解决方案......?)

我需要的是一个返回布尔值,告诉我 ID 是否实际包含在数组中 - 如果是,我需要文本。如果不是,我需要知道,因为我想添加一些其他文本(此处不相关)。

免责声明:要把这个送给 nickb,他太棒了。

编辑:这部分现在无关紧要:


这是我到目前为止得到的,但它返回 null。$trans_json 是上面引用的数组。$search[id] 是另一个数组,它包含 id 字符串。

$return = array_filter( $trans_json, function($el) { 
    if( !( $start = strpos( $el, $search[id]) === false)) {
            $str =  substr( $el, $start);
            return substr( $str, 0, strpos( $str, '}'));
    }
            return null;
    });
4

2 回答 2

1

Use array_walk():

Your example isn't working because $search is undefined. You need a closure (note the use ($search):

$search['id'] = '2s5d56b9712';
$return = array_walk( $trans_json, function( &$el) use( $search) { 
    if( !( ($start = strpos( $el, $search['id'])) === false)) {
        $str =  substr( $el, $start);
        $el = substr( $str, strlen( $search['id']) + 1, strpos( $str, '}'));
    }
});

var_dump( $trans_json);
于 2012-06-20T21:42:07.633 回答
0

See code below if it suits your need.

<?php

$subject = 'array(32) { [0]=> string(3266) "{"respString":{"feedbackText":"2s5d56b9712 the preceding id is the string i want to search for, and this is the rest of the text i want to get until here:"},"blablaarraycontinues...';

preg_match("/feedbackText\":\"2s5d(.*)\}/",$subject,$matches);

print_r($matches[1]); // output the matched string

?>
于 2012-06-20T21:51:06.063 回答