-1
$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

4 回答 4

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>';

}
于 2013-09-21T01:13:35.260 回答
1

首先,如果可能,请始终提供实际的代码示例。否则我们会留下“我写了一些没用的东西”。我们只能用“写一些可以做的事情”来回答。

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

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

看看这个 ideone 样本

<?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));
 }

?>
于 2013-09-21T02:53:00.443 回答
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>';
}
于 2013-09-21T01:14:01.967 回答
0

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

$startIndexes = array(0, 6, 12, 18); 
$endIndexes = array(5, 11, 17, 23);
于 2013-09-21T01:05:48.590 回答