Php 来自json解码页面的preg匹配

Php 来自json解码页面的preg匹配,php,regex,preg-match,preg-match-all,Php,Regex,Preg Match,Preg Match All,我有一个json解码页面,我想从该页面中删除一些数据。 我需要放弃这个“值”:“6fc975cd-bbd4-2daa-fc6b-1e8623f80caf |天线和滤波器产品|滤波器产品” 这是我的preg match函数 public function getcategories( $page = '' ) { $results = array(); preg_match_all( '~/\[value\]\s=>\s(.*?)\s*\[~', $page, $m

我有一个json解码页面,我想从该页面中删除一些数据。 我需要放弃这个“值”:“6fc975cd-bbd4-2daa-fc6b-1e8623f80caf |天线和滤波器产品|滤波器产品”

这是我的preg match函数

    public function getcategories( $page = '' ) {
    $results = array();
    preg_match_all( '~/\[value\]\s=>\s(.*?)\s*\[~', $page, $matchall );
    debug($matchall);die;
    if ( !empty( $matchall[1] ) ) {
        foreach ( $matchall[1] as $single ) {
            if ( strlen( $single ) > 1 ) {
                $results[] = $single;
                }
            }
        }
    return $results;
}
我在这里调用这个函数

function checkpage( $page = '' ) {

    $vars_all_array = $this->getvarsallfrompage( $page );   
    $get_api_url = $this->catspostreq($page);
    $post_data   = $this->makePostData( $vars_all_array, 0, 25 );

    $jsonpage = $this->get_page( $get_api_url, array ('data' => $post_data, 'content-type'=> 'application/x-www-form-urlencoded; charset="UTF-8"; application/json' ) );
    $json_decoded = json_decode($jsonpage);
        $categories  = $this->getcategories( $json_decoded );
        debug($categories);die;
        }
但有些东西不好用,我有一个错误:

preg\u match\u all()希望参数2是字符串,数组给定


有人能帮我吗?

checkpage
函数中,您将
json\u decode
的值作为参数传递给
getcategories
函数,该函数在大多数情况下返回数组。您的
getcategories
$page
参数作为
preg\u match\u all

$json_decoded = json_decode($jsonpage);
$categories  = $this->getcategories( $json_decoded );
在你的分类中

preg_match_all('~/\[value\]\s=>\s(.*?)\s*\[~', $page, $matchall);

这里$page是一个数组
json\u decode
的结果。这就是为什么会出现错误

您不需要进行预匹配即可从
$json\u decoded
中获取值,因为
json\u decode()
将返回(如果成功)一个完全可读的数组或对象。
因此,要获得一个特定值,您可以这样访问它:

$value = $json_decoded['groupByResults'][0]->values[0]->value;
由于希望将所有值都包含在一个新数组中,因此可以迭代这些值并将其传递给一个新数组:

$categories = [];
foreach($json_decoded['groupByResults'][0]->values as $item) {
     $categories[] = $item['value'];
}
内置的数组函数可以在一行中完成这项工作,可能更快。这是为了说明您正在对数据做什么

使用此函数将产生以下一个线性函数:

$categories =  array_column($json_decoded['groupByResults'][0]->values, "value");

消息很清楚,您将数组作为第二个参数而不是字符串!我认为您希望将
$jsonpage
传递到
getcategories
,而不是
$json\u decoded
,我不明白您为什么需要函数getcategories(带有preg\u match\u all)
$json_decoded
是一个数组/对象,因此您可以轻松地从中获取“值”。smth like:
$value=$json_解码['groupByResults'][0]->value[0]->value=>
只有在你
var\u dump($json\u decoded)
时才在那里,它不是原始json的一部分,也不是$json\u decoded。谢谢,这就是我想要的!