2016-10-12 2 views
0

Ich bin neu, wenn ich einen Fehler gemacht habe, können Sie mir sagen oder meine Frage aktualisieren.Mein Code funktioniert nicht für negativen Wert von Parameter

Ich habe eine Aufgabe, ich versuchte schwer zu lösen, aber es funktioniert nur für positive Wert von Parameter, aber nicht für negativen Wert. Hier ist mein Code. bitte helft bei der Fertigstellung. Desire-Ausgabe ist kommentiert.

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

?> 

Meine Ausgabe ist

bcdef 
bcd 
abcd 
abcdef 

abcdef 
abcdef 

und den Wunsch Ausgang ist

bcdef 
bcd 
abcd 
abcdef 
f 
f 
ef 
d 
abcde 
cde 

de 

Vielen Dank für Ihre Hilfe.

+2

Warum Teilzeichenfolge gerade nicht benutzen? anstatt deine eigene Funktion zu machen? – Naruto

+0

Wie wäre es mit: http://php.net/manual/en/functionsubstr.php – Timothy

+0

Haben Sie die 'error_reporting' ausgeschaltet? –

Antwort

2

Sie können mit folgendem Code versuchen

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

, wie Sie diese von hier zu finden: http://php.net/manual/en/function.substr.php

+0

Danke beide Antwort funktioniert :) – pappu

0

Sie könnten auch durch diese Art und Weise tun.

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]; 
     } 
    } 

prüfen diese Demo: https://eval.in/659236

+0

Danke beide Antwort funktioniert :) – pappu

Verwandte Themen