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 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000