2011-09-08 63 views
0

我有一个字符串,如sub_category-21,cross_category-23,sub_category-33,sub_category-93,cross_category-69搜索与PHP中的模式匹配的元素

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

,因为我现在所做的一切是独立的它在数组中:

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

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

foreach($categories as $category) 
{ 

} 

我可怎么办呢?

预先感谢您!

回答

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

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); 
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); 
    } 
}