PHP分割字符串并放入数组中

5

我有这一行字符串

Fruits-banana|apple|orange:Food-fries|sausages:Desserts-ice cream|apple pie

:(冒号)是主题的分隔符,|是不同类型子主题的分隔符。

我尝试将其拆分成数组,并将其放入下拉菜单中显示:

    水果
      香蕉
      苹果
      橙子
    食品
      炸薯条
      香肠
    $result=explode(":",$data);
     foreach($result as $res) {
      $sub_res[]=explode("-",$res);

     }


     foreach($sub_res as $sub) {
      //echo $sub[1]."<br>"; Over here, I can get the strings of [0]=>banana|apple|orange, [1]=>sausages|fries, 
        // I explode it again to get each items 
            $items[]=explode("|",$sub[1]);
      $mainCategory[]=$sub[0]; // This is ([0]=>Fruits, ]1]=>Food, [2]=>dessert
            // How do I assign the $items into respective categories?
    }

谢谢!


你需要单独的二维子类别数组吗? - Kel
您需要一个下拉菜单集中显示所有选项,还是每种类型都有一个独立的下拉菜单? - Jason
无论是二维数组还是其他类型的数组,都没有关系 :) - Sylph
这行代码是由系统自动生成的。我只需要一个下拉菜单。 - Sylph
3个回答

6
你可以做以下事情:
$result=explode(":",$data);
foreach($result as $res) {
        $sub = explode("-",$res);
        $mainCategory[$sub[0]] = explode("|",$sub[1]);
}

工作链接


3

代码:

$data = "Fruits-banana|apple|orange:Food-fries|sausages:Desserts-ice cream|apple pie";
 foreach(explode(":",$data) as $res) { // explode by ":"
  $cat = explode("-",$res); // explode by "-"
  $ilovefood[$cat[0]] = explode("|",$cat[1]); // explode by "|"
 }
 print_r($ilovefood);
 //Returns : Array ( [Fruits] => Array ( [0] => banana [1] => apple [2] => orange ) [Food] => Array ( [0] => fries [1] => sausages ) [Desserts] => Array ( [0] => ice cream [1] => apple pie ) )
 foreach($ilovefood as $type=>$yum){
  echo "$type:<select>";
  foreach($yum as $tasty){
   echo "<option>$tasty</option>";
  }
  echo "</select>";
 }

更新以反映下拉菜单的添加。看起来我刚刚完成了你的作业,但我将把它留给你将所有内容合并为一个foreach循环。


谢谢Jason!我不需要三个下拉菜单,但是你的回答确实帮助我更好地理解了:D - Sylph
我刚意识到我有 $ilovefood[$cat[0]],实际上我并不喜欢吃猫。 - Jason

1

我提出一个可能更易读的代码addicts 答案

$str = "Fruits-banana|apple|orange:Food-fries|sausages:Desserts-ice cream|apple pie";

$topics = array();
foreach (explode(':', $str) as $topic) {
  list($name, $items) = explode('-', $topic);
  $topics[$name] = explode('|', $items);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接