PHP:我应该如何将这个不一致的字符串转换为数组?

时间:2012-07-11 13:44:47

标签: php arrays string delimiter

我有这个字符串:$delims = ',^.;:\t'(在preg_replace()电话中使用) 我需要两个数组..一个用这些分隔符作为索引($delimCount),另一个用这些分隔符作为值($delimiters)。

前者将从后者的循环中获取值...如下:

foreach ($delimiters as $delim) { 
    if( strpos($char, $delim) !== false) { // if the char is the delim ...
        $delimCount[$delim]++; // ... increment
    }
}

我现在拥有它的方式很麻烦,我想简单地将那个字符串分成两个数组...但是我在\t分隔符上被绊倒了(因为它是唯一的一个有两个字符) 我该怎样/应该怎么处理?

3 个答案:

答案 0 :(得分:1)

我将如何处理您的\t分隔符

$delims = ',^.;:\t';

$i = 0;

while($i < strlen($delims)) {
    if($delims[$i] == chr(92)) {
        $delimiters[] = $delims[$i] . $delims[$i+1];
        $i = $i + 2;
    }
    else {
        $delimiters[] = $delims[$i];
        $i++;
    }
}

$ delimiters的输出

Array
(
    [0] => ,
    [1] => ^
    [2] => .
    [3] => ;
    [4] => :
    [5] => \t
)

至于以分隔符作为索引的数组

foreach($delimiters as $key=>$val) {
    $delimCount[$val] = $val;
}

$ delimCount的输出

Array
(
    [,] => ,
    [^] => ^
    [.] => .
    [;] => ;
    [:] => :
    [\t] => \t
)

希望这有帮助。

答案 1 :(得分:0)

  

我需要两个数组..一个用这些分隔符作为索引($ delimCount),另一个用这些分隔符作为值($ delimiters)。

嗯,$ delimiters来自哪里?你自己写的吗?如果是这样,我认为你最好不要在任何情况下使$ delimiters成为一个数组,并在preg_replace中使用implode。

答案 2 :(得分:0)

如果您对制表符有问题,那么您可以使用序号字符作为字符本身的关键字:$delim = "\t"; $delimCount[ ord($delim) ]++;

方便的补充功能:ord()chr()