搜索与PHP中的模式匹配的元素
问题描述:
我有一个字符串,如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)
{
}
我可怎么办呢?
预先感谢您!
答
正则表达式是可能是最方便的解决方案在这里(你也不必担心空白等):
$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);
为了方便起见,此代码将结果放在$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);
答
把下面的到的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);
答
看分割功能: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);
}
}