我的代码不适用于参数

时间:2016-10-12 09:32:52

标签: php

我是新人,如果我有任何错误,你可以告诉我或更新我的问题。

我有一个任务,我努力解决但是它只能用于参数的正值但不能用于负值。这是我的代码。请帮忙完成。欲望输出被评论。

<?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

感谢您的帮助。

2 个答案:

答案 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"
?>

你可以从这里找到:http://php.net/manual/en/function.substr.php

答案 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