搜索与PHP中的模式匹配的元素

时间:2011-09-08 09:21:28

标签: php

我有一个像sub_category-21,cross_category-23,sub_category-33,sub_category-93,cross_category-69这样的字符串。

我想获取sub_category的数字和跨类别的数字。

我从现在开始做的是将它分成一个数组:

$categories = explode(",", $_POST["categories"]);

$sub_categories = array();
$cross_categories = array();

foreach($categories as $category)
{

}

我怎么做?

提前谢谢!

3 个答案:

答案 0 :(得分:2)

正则表达式可能是这里最方便的解决方案(您也不需要担心空白等):

$str = 'sub_category-21,cross_category-23,sub_category-33,'.
       'sub_category-93,cross_category-69';
preg_match_all('/(sub|cross)_category-([0-9]+)/', $str, $matches,PREG_SET_ORDER);

$categories = array('sub' => array(), 'cross' => array());
foreach($matches as $match) {
    $categories[$match[1]][] = $match[2];
}

print_r($categories);

<强> See it in action

为方便起见,此代码将结果放在$categories['sub']$categories['cross']中,而不是放在两个单独的变量中。如果你想以不同的方式完成它,很容易改变它。

您也可以使用嵌套explode

来执行此操作
$str = 'sub_category-21,cross_category-23,sub_category-33,'.
       'sub_category-93,cross_category-69';

$categories = array();

foreach(explode(',', $str) as $category) {
    list($type, $id) = explode('-', trim($category));
    $categories[$type][] = $id;
}

print_r($categories);

<强> See it in action

答案 1 :(得分:0)

将以下内容放入foreach循环中,就像一个简单的想法

$category_strpos = strpos($category, "cross_category-")
    if($category_strpos == 0 && $category_strpos !== FALSE)
        $cross_categories[] = str_replace("cross_category-", "", $category);
$sub_strpos = strpos($category, "sub_category-")
    if($sub_strpos == 0 && $sub_strpos !== FALSE)
        $sub_categories[] = str_replace("sub_categories-", "", $category);

答案 2 :(得分:0)

查看分割函数:http://php.net/manual/en/function.split.php

foreach($categories as $category)
{
    $split1=split("-",$category);
    $num=$split1[1];
    $name=$split1[0];
    if($name=="sub_category"){
        array_push($sub_categories,$num);
    }
    if($name=="cross_category"){
        array_push($cross_categories,$num);
    }
}