$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>';
}
我知道数组没有正确初始化,它们只是为了显示真实的数组。
答案 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);
。
其次,你不需要第二个数组。
<?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>';
}