2011-09-08 118 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); 
    } 
} 
相關問題