0

我有这个字符串:($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分隔符绊倒了(因为它是唯一一个有两个字符的)。
我该如何/应该如何处理?

4

3 回答 3

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
)

希望这可以帮助。

于 2012-07-11T14:01:10.600 回答
0

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

那么,$delimiters 是从哪里来的呢?你自己写的吗?如果是这样,我认为您最好在任何情况下将 $delimiters 设为一个数组,并在 preg_replace 中使用它时使用 implode。

于 2012-07-11T13:56:06.757 回答
0

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

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

于 2012-07-11T14:17:16.817 回答