2017-01-26 16 views
1

我想在PHP中左旋數組2次。它工作正常,但由於某些未知原因,數組中有一個空白區域。這是我的代碼:PHP在PHP中左旋數組

$a_temp = fgets($handle); 
$a = explode(" ",$a_temp); 
for($i = 0; $i < 2; $i++){ 
    print_r($a); 
    array_unshift($a, array_pop($a)); 
    print_r($a); 
} 

的文件有這樣的事情:

1 2 3 

現在輸出我得到的是:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 

) 
Array 
(
    [0] => 3 

    [1] => 1 
    [2] => 2 
) 
Array 
(
    [0] => 3 

    [1] => 1 
    [2] => 2 
) 
Array 
(
    [0] => 2 
    [1] => 3 

    [2] => 1 
) 

正如你可以看到,每一次旋轉是它會在其中引入一個空白區域,並且在打印數組時,它會顯示爲一個新的行字符。任何想法我做錯了什麼?

+2

確保您的元素是「3」而不是「3 \ n」。 (請注意第一個print_r在關閉paren之前是否還有額外的空間,提示問題在於輸入。) – cHao

+0

您是否將包含「123 \ n」'的字符串分割爲數組? – Kulvar

+1

我運行你的代碼[在這裏](http://sandbox.onlinephpfunctions.com/),它工作正常。但是我以'$ a = [1,2,3];開頭''。不知道你是從什麼開始的,因爲你沒有在你的問題中包含它 – inorganik

回答

3

正如所指出的@cHao ANS @Kulvar,你的 「3」 元件實際上是在 「3 \ n」 個,因爲您通過fgets返回線與\n這是正常結束。

$a = explode(" ",$a_temp);替換爲$a = explode(" ",trim($a_temp));並且您已修復。可以與任何字符串一起使用,數字或不是

1

看來你有一個非整數值。使用array_map()將所有值轉換爲整數。

$a_temp = fgets($handle); 
$a = explode(" ",$a_temp); 
$a = array_map("intval", $a); //Cast all values to integers 
for($i = 0; $i < 2; $i++){ 
    print_r($a); 
    array_unshift($a, array_pop($a)); 
    print_r($a); 
} 

https://eval.in/724912

+0

是鑄造固定它!謝謝! – JackSlayer94

+0

是鑄造固定它,但這不是正確的答案。如果你的文件包含'a b c'而不是'1 2 3'?這個答案是行不通的。 –

+0

沒有它保證是一個整數,並有一個更多的答案,在他修剪它時在字符串上工作。 – JackSlayer94

0

您可以將array_push()array_shift()函數結合使用。在我的解決方案中,您將不得不輸入一些旋轉數,或者您只需將for-loop中的$k變量更改爲所需的旋轉量。

for($i=0; $i<$k; $i++){ 

    //remove first element 
    $firstElement = array_shift($a); 

    //push first element to the end 
    array_push($a, $firstElement); 

} 

echo implode(" ", $a);