2017-05-04 91 views
0

我以前刪除charactors使用:在特定索引處從字符串中刪除字符的最快方法?從字符串

$str[$position] = ''; 

我需要做的這幾次,在一個循環:

while ($condition == true) 
{ 
    $str[$position++] = ''; 
    // My code 
} 

的代碼非常完美,是非常有效的,但是,它現在我已經升級到PHP 7.1.4不再適用。

如果我使用:

while ($condition == true) 
{ 
    $str[$position++] = ' '; 
    // My code 
} 

它的工作原理,但我得到不必要的空間。

但是,我可以使用這個工作,但是,這將是非常低效的。什麼是解決這個問題的最快和最有效的方式,爲什麼它不適用於PHP 7.1.4?

編輯

我固定的停止使用substr_replace升級PHP之後使用的代碼。起初,它似乎tcPeng是正確的說:

,如果你指定一個空字符串爲一個字符串偏移,警告應提高和字符串不應該被修改

,因爲這是我遇到的確切問題。然而,在我的代碼中的其他地方,我有:

while (trim($file[$i]) !== 'default:') 
    $file[$i++] = ''; 

當然,該代碼應該不再工作。奇怪的是,它確實有效。爲什麼它能夠正常工作,並且我有什麼要改變代碼來使用substr_replace

我不得不修復的代碼與substr_replace和發生的代碼仍然有效的唯一區別是我必須修復的代碼,該字符串是數組的一個元素,它的輸出是echo。隨着代碼仍然有效,我用file_put_contents保存它。

回答

1

在php7.1中,如果將空字符串賦值給字符串偏移量,則應引發警告,並且不應修改該字符串。

https://bugs.php.net/bug.php?id=71572

所以,如果你想在一個字符串中刪除特定的指數,試試這個:

$a = 'hello'; 
$a = substr($a, 0, 1) . substr($a, 2, 5); 
var_dump($a); // string(4) "hllo" 

或者這可能是更有效的:

$a = 'hello'; 
$a = substr_replace($a, '', 1, 1); 
var_dump($a); // string(4) "hllo" 

在PHP5以上PHP7 .0,如果您使用$a[1] = '',字符串$a是這樣的:

$a = 'hello'; 
$a[1] = ''; 
var_dump($a); // string(5) "h\000llo" 

將字符串$a的索引1替換爲空值的\000。它並沒有被移除。所以如果你想得到hllo,索引分配不是一個好的選擇。

希望這有助於...