我是新人,如果我有任何错误,你可以告诉我或更新我的问题。
我有一个任务,我努力解决但是它只能用于参数的正值但不能用于负值。这是我的代码。请帮忙完成。欲望输出被评论。
<?php
function custom_substr($str, $start,$end=999){
$str_length = strlen($str);
for($i=$start;$end>0&&$str_length>$i;$i++,$end--){
echo $str[$i];
}
}
echo custom_substr('abcdef', 1); // bcdef
echo "\n";
echo custom_substr('abcdef', 1, 3); // bcd
echo "\n";
echo custom_substr('abcdef', 0, 4); // abcd
echo "\n";
echo custom_substr('abcdef', 0, 8); // abcdef
echo "\n";
echo custom_substr('abcdef', -1, 1); // f
echo "\n";
echo custom_substr("abcdef", -1); // returns "f"
echo "\n";
echo custom_substr("abcdef", -2); // returns "ef"
echo "\n";
echo custom_substr("abcdef", -3, 1); // returns "d"
echo "\n";
echo custom_substr("abcdef", 0, -1); // returns "abcde"
echo "\n";
echo custom_substr("abcdef", 2, -1); // returns "cde"
echo "\n";
echo custom_substr("abcdef", 4, -4); // returns false
echo "\n";
echo custom_substr("abcdef", -3, -1); // returns "de"
?>
我的输出是
bcdef
bcd
abcd
abcdef
abcdef
abcdef
欲望输出
bcdef
bcd
abcd
abcdef
f
f
ef
d
abcde
cde
de
感谢您的帮助。
答案 0 :(得分:2)
您可以尝试使用以下代码
function custom_substr($string, $start, $length = 999)
{
if($start > strlen($string)) { return false; }
if(empty($length)) { return ''; }
if($start < 0) { $start = max(0, $start + strlen($string)); }
$end = ($length < 0) ?
strlen($string) + $length :
min(strlen($string), $start + $length);
if($end < $start) { return false; }
$length = $end - $start;
$substr = substr($string, $start, $length);
$string = substr($string, 0, $start).substr($string, $end);
return $substr;
}
echo custom_substr('abcdef', 1); // bcdef
echo "</br>";
echo custom_substr('abcdef', 1, 3); // bcd
echo "</br>";
echo custom_substr('abcdef', 0, 4); // abcd
echo "</br>";
echo custom_substr('abcdef', 0, 8); // abcdef
echo "</br>";
echo custom_substr('abcdef', -1, 1); // f
echo "</br>";
echo custom_substr("abcdef", -1); // returns "f"
echo "</br>";
echo custom_substr("abcdef", -2); // returns "ef"
echo "</br>";
echo custom_substr("abcdef", -3, 1); // returns "d"
echo "</br>";
echo custom_substr("abcdef", 0, -1); // returns "abcde"
echo "</br>";
echo custom_substr("abcdef", 2, -1); // returns "cde"
echo "</br>";
echo custom_substr("abcdef", 4, -4); // returns false
echo "</br>";
echo custom_substr("abcdef", -3, -1); // returns "de"
?>
答案 1 :(得分:0)
你也可以这样做。
function custom_substr($str, $start,$end=999){
$str_length = strlen($str);
if($start<0){//Change your start position if negative
$start = $str_length + $start;
}
if($end<0){//Change your end position if negative
$end = $str_length + $end-$start;
}
for($i=$start;$end>0&&$str_length>$i;$i++,$end--){
echo $str[$i];
}
}
查看此演示:https://eval.in/659236