将多个分隔符的字符串分解为多维数组php

时间:2013-04-16 11:57:41

标签: php arrays multidimensional-array

有人可以帮我一个手工制作这个爆炸功能递归吗?我的头今天不工作了。

function expl($str,$charlist='|'){
    $charlist = str_split($charlist);
    foreach($charlist as $char){
        if(is_array($str)){
            for($i=0; $i<sizeof($str); $i++){
                $str[$i] = expl($str[$i],$char);
            }
        }else{
            return (explode($char,trim($str,$char)));
        }
    }
    return($str);
}
echo "<pre>";
print_r(expl("A~a1~a2|B~b1~b2",'|~'));
echo "</pre>";

应输出:

Array
(
[0] => Array
    (
        [0] => A
        [1] => a1
        [2] => a2
    )
[0] => Array
    (
        [0] => B
        [1] => b1
        [2] => b2
    )
)

3 个答案:

答案 0 :(得分:1)

<?php
function expl($str,$charlist='|'){
if(!$charlist) return($str);
$char = $charlist[0];
$matrix = explode($char,$str);
for($i=0; $i<sizeof($matrix); $i++){
    $matrix[$i] = expl($matrix[$i],substr($charlist,1));
}
return($matrix);
}
echo "<pre>";
print_r(expl("A~a1~a2|B~b1~b2",'|~'));
echo "</pre>";
?>

这将是这样的...... 使用递归! 第一级矩阵会得到第一个矩阵,做这样的事情 $ matrix [0] =“A~a1~a2”; $ matrix [1] =“B~b1~b2”; 然后,递归将执行第二部分,这将使每个字符串成为字符串数组,这将成为字符串数组,直到没有更多的分隔符=)

答案 1 :(得分:1)

以下是一个工作示例,我提供了一个链接,可以在运行该函数时显示输出:

返回示例:

http://phpfiddle.org/api/run/4iz-i2x

<强>用法:

echo '<pre>';
print_r( expl("A~a1~a2|B~b1~b2",'|~'));
echo '</pre>';

<强>功能:

<?php

function expl($str,$charlist='|', $currentChar = 0, $continue = true){

    if(!$continue)
    {
        return $str;
    }

    $endArray = array();

    if($currentChar == 0){
        $charlist = str_split($charlist);
    }
    else
    {
        if($currentChar > count($charlist))
        {
            return expl($str, $charlist, $currentChar, false);
        }
    }

    if(!is_array($str))
    {   
        $pieces = explode($charlist[$currentChar], $str);
        $currentChar++;
        return expl($pieces, $charlist, $currentChar);
    }
    else{
        foreach($str as $arrayItem){
        if(is_array($arrayItem))
        {
                return expl($str, $charlist, $currentChar, false);
        }

        $endArray[] = explode($charlist[$currentChar], $arrayItem);

        }


        $currentChar++;
        return expl($endArray, $charlist, $currentChar);                
    }               
}    

?>

答案 2 :(得分:0)

简单地这样做。首先爆炸'|'那么'〜'。它应该是这样的:

$str="A~a1~a2|B~b1~b2";
$arr=explode("|",$str);
$result=array();
foreach($arr as $k=>$v)
{
  $arr1=explode("~",$v);
  $result[]=$arr1;
}