dth34653 2012-08-23 07:58
浏览 393
已采纳

如何将分号分隔的字符串放入数组?

Well I was just wondering how can I put this semicolon separated string into an array

one,two,three; four,five,six; if( i < x { "seven,eight"; } if( x < i ) { nine; }

The result I need would be

[0] => one,two,three
[1] => four,five,six
[2] => if( i < x { "seven,eight"; } if( x < i ) { nine; }

I know how to explode those separated values but I'm stuck in this

if( i < x { "seven,eight"; } if( x < i ) { nine; }

The original data is this

bonus2 bAddRace,RC_DemiHuman,80; bonus2 bIgnoreDefRate,RC_DemiHuman,30; if(getrefine()>=6) { bonus2 bAddRace,RC_DemiHuman,40; } if(getrefine()>=9) {  autobonus2 "{ bonus bShortWeaponDamageReturn,20; bonus bMagicDamageReturn,20; }",200,1000,BF_WEAPON,"{ specialeffect2 EF_REFLECTSHIELD; }"; }

The code I've tried so far is this

function build_item_script_options( $data = array() )
{
    $html = "";
    $bonus_txt = "";
    $bonus_opts = "";
    $bonus_opts_array = array();

    $script = explode( ";", $data['script'] );
    for( $i = 0; $i <= count( $script ) - 1; $i++ )
    {
        if( strtolower( substr( $script[$i], 0, 5 ) ) == 'bonus' )
        {
            $bonus = explode( ',', $script[$i] );
            for( $k = 1; $k <= $bonus[$i] - 1; $k++ )
            {
                array_push( $bonus_opts_array, $bonus[$i][$k] );
            }
            $bonus_txt = $bonus[0];
            $bonus_opts = implode( ',', $bonus_opts_array );
        }
        else
        {
            $bonus_txt = $script[$i];
        }

        $html .= "<option opts=\"" . $bonus_opts . "\" value=\"" . $bonus_txt . "\" selected=selected>" . $bonus_txt . "</option>";
    }

    return $html;
}
  • 写回答

4条回答 默认 最新

  • donglv9813 2012-08-23 08:06
    关注

    Is this what you need?

    $str = 'one,two,three; four,five,six; if( i < x { "seven,eight"; } if( x < i ) { nine; }';
    $str = explode("; ", $str, 3);
    print_r($str);
    

    Example:

    http://codepad.org/fqKMTUcp

    ** EDIT **

    You could also try this:

    $open_brackets = '0';
    $string = '';
    $str = 'one,two,three; four,five,six; if( i < x { "seven,eight"; } if( x < i ) { nine; }';
    $split = str_split($str);
    foreach($split as $bracket){
    $string .= $bracket;
    if($open_brackets == '0' && $bracket == ';'){
    $string = substr_replace($string, "*", -1);
    }
    if($bracket == '{'){
    $open_brackets++;
    }
    if($bracket == '}'){
    $open_brackets--;
    }
    }
    $string = explode('* ', $string);
    print_r($string);
    

    Example:

    http://codepad.org/uO9sGnDz

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)