严格标准错误,尝试将字符串反转为数组

时间:2017-04-12 12:06:52

标签: php arrays

所以我有一个逗号分隔值的字符串:

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

我想扭转那个顺序。所以我写了这个:

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

基本上我转换为数组,反转数组,并将其内爆回字符串。那有什么不对?

我遇到了很多这样的错误:

  

严格标准:只应在第121行的/home/username/public_html/file.php中通过引用传递变量

     

警告:implode():第121行/home/username/public_html/file.php中传递的参数无效

编辑:

现在我想知道我构建$ 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++;
}

我使$ accounts变量的方式是否不会产生字符串?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

快速简便:

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

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