2014-09-26 81 views
2

未定義變量爲$new_string

我寫了這個小腳本,因爲我需要它,(不要問爲什麼)。

$string = "abcdefghijklmnopqrstuvwxyz"; // just used as an example 

    // $string becomes "badcfehgjilknmporqtsvuxwzy" 

    $now_in_pairs = str_split($string, 2); 

    $reverse = array_map('strrev', $now_in_pairs); 

    foreach($reverse as $r) { 

    $new_string .= $r; 

    } 

    echo $new_string; 

我知道我可以簡單地說,$new_string = NULL在一開始就避免了未定義的變量,但它不能幫助我理解爲什麼它沒有被定義。

非常外行的說法,$r等於數組中每對的值?

$new_string如何等於$r

回答

2
foreach($reverse as $r) { 
    $new_string .= $r; 
    } 

$new_string .= $r;意味着$new_string = $new_string . $r;這裏要附加$r到未聲明或該代碼,即,不存在前定義的變量$new_string的值。您可以通過聲明以上foreach像變量解決這個問題:

$new_string=""; 
foreach($reverse as $r) { 
     $new_string .= $r; 
     } 
+0

implode功能我明白了。謝謝。我認爲第一個循環將被認爲是等於,並且後面的循環是附加的。我的假設是錯誤的。 – Tom 2014-09-26 05:27:42

+0

@湯姆。總是歡迎。很高興幫助你:) – Jenz 2014-09-26 05:28:38

0

沒有錯誤在你的程序的輸出: -

http://codepad.org/9FDqrh3D

它給gthe正確的輸出爲$ new_string

+0

http://3v4l.org/3c17q – sectus 2014-09-26 05:25:13

+0

@abhinsit對不起,我忘記提及代碼按計劃運行。我一直在使用它。我打開error_log並看到充滿未預期的未定義變量通知的頁面。 – Tom 2014-09-26 05:34:46

+0

當然,在抑制error_reporting時,通知不會顯示,但問題仍然存在。 – Christian 2014-09-26 05:35:10

1

OP正在尋找解決方案,其中$ new_string不需要事先初始化。

的解決方案是使用PHP

$new_string = implode($reverse); 
//another usage with glue parameter: 
//$new_string = implode('', $reverse); 
+0

不錯。謝謝。雖然我不知道名字,但Implode是我偶然發現的功能,當我偶然發現可以使用。= $ r來組合輸出對時。 – Tom 2014-09-28 03:41:26