如何将字符串分解为单个子字符串

时间:2013-09-21 01:00:52

标签: php string

$source = "oasdfyoasdfyoasdfyoasdfy";
$startIndexes = {0, 6, 12, 18}; #(o characters)
$endIndexes = {5, 11, 17, 23}; #(y characters)

这些只是实际结构的一个例子。

如何使用substr()和array [$ x]变量将$ source分解为单个字符串? $ startIndexes和$ endIndexes保证大小相同。

这似乎不起作用......

for($x = 0; $x < sizeOf($startIndexes); $x++)
{
    echo substr($source, $startIndexes[$x], $endIndexes[$x] - $startIndexes[$x]) . '</br></br>';
}

我知道数组没有正确初始化,它们只是为了显示真实的数组。

4 个答案:

答案 0 :(得分:1)

错误的数组初始化,并且缺少神奇的1看到wiki http://en.wikipedia.org/wiki/Off-by-one_error

$source = "oasdfyoasdfyoasdfyoasdfy";

$startIndexes = array(0, 6, 12, 18); #(o characters)
$endIndexes =  array(5, 11, 17, 23); #(y characters)

for($x = 0; $x < count($startIndexes); $x++) {

    echo substr($source, $startIndexes[$x], $endIndexes[$x] - $startIndexes[$x] + 1 ) . '</br></br>';

}

答案 1 :(得分:1)

首先,如果可能,请始终提供实际的代码示例。否则我们留下“我写了一些不起作用的东西”。我们只能回答“写一些有用的东西”。

数组语法应为$startIndex=array(0,6,12,18);

其次,你不需要第二个数组。

看看this ideone sample

<?php
    function suffix($number){
        $suffix = array('th','st','nd','rd','th','th','th','th','th','th');
        if (($number %100) >= 11 && ($number%100) <= 13)
            $abbreviation = $number. 'th';
        else
            $abbreviation = $number. $suffix[$number % 10];
        return $abbreviation;
    }
$source = "oasdfyoasdfyoasdfyoasdfy";
$startIndexes =array(0, 6, 12, 18);

for ($i=0; $i < count($startIndexes); $i++){
    $index= $startIndexes[$i];
    $len = ($i< count($startIndexes)-1 ? $startIndexes[$i +1]  :
                                          strlen($source)) - ($index);
    echo sprintf("The %s substring is:[%s]\n",
                                              suffix($i+1),
                                              substr($source, $index, $len));
 }

?>

答案 2 :(得分:0)

我相信你不能用这种方式初始化数组。它应该是

$startIndexes = array(0, 6, 12, 18); 
$endIndexes = array(5, 11, 17, 23);

答案 3 :(得分:0)

这是一种稍微不同的方法,使您的代码更小,更安全,更易于阅读和更快:

// Your string
$source = "oasdfyoasdfyoasdfyoasdfy";
// Instead of two arrays, you can have only one, using start positions 
// as the keys, and end positions as values
$positions = array(0=>5, 6=>11, 12=>17, 18=>23);
// Do a foreach loop, it's more efficient.
foreach($positions as $start => $end)
{
    echo substr($source, $start, $end - $start + 1) . '</br></br>';
}