我有一个像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)
{
}
我怎么做?
提前谢谢!
答案 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);
}
}