2016-10-12 4 views
0

私は新しいです、私が間違いを犯した場合は、私に教えてください。パラメータの負の値に対してマイコードが機能していません

私は課題を持っていますが、私は解決しようと努力しましたが、パラメータの正の値に対してのみ働いていましたが、負の値には作用しませんでした。ここに私のコードです。完了するのを手伝ってください。 Desireの出力はコメントされています。

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

理由だけではなく、部分文字列を使用しませんか?あなた自身の機能を作る代わりに? – Naruto

+0

について:http://php.net/manual/en/function.substr.php – Timothy

+0

あなたは 'error_reporting'をオフにしましたか? –

答えて

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

+0

ありがとう両方の答えは働いています:) – pappu

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

+0

ありがとう両方の答えは働いています:) – pappu

関連する問題