2017-04-12 20 views
0

所以我有一個逗號分隔值的字符串:嚴格的標準錯誤,試圖扭轉一個字符串數組

$accounts = "1,2,3,4,5,6"; 

而且我要扭轉這種秩序。所以我寫了這樣的:

$accountsrev = implode(',',rsort(explode(',',$accounts))); 

基本上我轉換爲一個數組,反轉數組,並implode它回到一個字符串。那有什麼問題?

我得到這樣的錯誤的負載:

嚴格的標準:只有變量應當參照在/home/username/public_html/file.php轉嫁線121

警告:破滅():無效參數在/home/username/public_html/file.php傳遞線121上


編輯:

現在我不知道我建立$ accounts變量的方式是錯誤的。我從數據庫中拖出7行,然後在while循環中構建$ accounts變量。該id是數據庫中的一個整數:

$accounts = ''; 
$i = 1; 
while ($data = $getdata->fetch(PDO::FETCH_ASSOC)) { 
    if ($i < 7) { 
     $accounts .= $data['id'].','; 
    } else { 
     $accounts .= $data['id']; 
    } 
    $i++; 
} 

難道我做$方式帳戶變量不會產生串?

+4

如果你的第一線真象你在展示什麼在這裏,你應該首先解決這個問題:'$ accounts = 1,2,3,4,5,6;'不是字符串,'$ accounts =「1,2,3,4,5,6」;'現在它是。 – domsson

+0

我的不好,那是一個錯字。我從數據庫調用7行,然後在while循環中構建字符串。所以我的代碼實際上並不包含那部分。 – s1h4d0w

回答

2

這僅僅是一些告訴你,你正在做的完全錯誤的東西:

$array = [1,2,3,4]; 

rsort($array); 

//$array is sorted. 

但是:

rsort(array_filter($array)); 

//Array filter returned a copy of the original array so $array is neither sorted nor filtered. 

你需要做的:

$accounts = ''; 
while ($data = $getdata->fetch(PDO::FETCH_ASSOC)) { 
    $accounts .= $data['id'].','; 
} 
$accountsrev = explode(',',rtrim($accounts,",")); 
rsort($accountsrev); 
$accountsrev = implode(',',$accountsrev);//accountsrev is sorted here 
+0

+1不僅用於提供固定版本的代碼,而且還用於解釋爲什麼OP代碼無法工作。 – domsson

+0

accounts變量是一個錯字,並不是真的在我的代碼中。我用來自數據庫的數據使用while循環創建字符串。你可以閱讀編輯的問題嗎? – s1h4d0w

+0

@ s1h4d0w我不明白爲什麼這將是一個問題,但檢查我更新的答案仍然 – apokryfos

1
<?php 
$accounts = ''; 
    $i = 0; 
    while ($data = $getdata->fetch(PDO::FETCH_ASSOC)) { 
     $i++; 
     if($i == 1){ 
      $accounts = $data['id']; 
     } else { 
      $accounts .= $data['id'].','; 
     } 
    } 

     $accountsrev = explode(',',$accounts); // explode it as make array 
     rsort($accountsrev); // then use rsort which sort array reverse 
     $accountsrev = implode(',',$accountsrev); // again implode it 
     echo $accountsrev; 
     ?> 

那麼輸出將是

6,5,4,3,2,1 

,或者您可以使用array_reverse()功能,而不是rsort

echo $accountsrev = implode(',',array_reverse(explode(',',$accounts))); 

然後輸出將是

6,5,4,3,2,1 
+0

accounts變量是一個錯字,並不是真的在我的代碼中。我用來自數據庫的數據使用while循環創建字符串。你可以閱讀編輯的問題嗎? – s1h4d0w

+0

好吧等一分鐘 –

+0

檢查我的更新代碼 –

0

方便快捷:

$accounts = '1,2,3,4,5,6'; 

echo $accountsrev = implode(',',array_reverse(explode(',',$accounts)));