2017-02-10 21 views
0

関数から返された文字列を別の文字列に連結しようとしていますが、文字列の最後に連結するのではなく、関数の返す値を文字列の先頭に挿入しています。PHP - 最初はなぜ連結していますか?

ここことを行うコードの一部です:私の予想出力(真であることIF最初の場合)である

$dados = ''; 
if ($unidade == 'Goiânia') { 
    $dados = "58, 63, 66, 66, 81, 85, 86, 86, 89, 90, 90,"; 
} elseif ($unidade == 'Jataí') { 
    $dados = "11, 15, 18, 20, 21, 23, 23, 24, 24, 25, 25,"; 
} elseif ($unidade == 'Catalão') { 
    $dados = "9, 14, 16, 19, 24, 25, 25, 25, 25, 26, 26,"; 
} elseif ($unidade == 'Goiás') { 
    $dados = "1, 1, 1, 1, 3, 3, 3, 3, 5, 6, 7"; 
} 
// Concatenating the string with the function 
// the function returns a string. 
$dados .= consultaSimplesRetornaString($sql); 
echo $dados; 

58, 63, 66, 66, 81, 85, 86, 86, 89, 90, 90, 

私が実際に取得しています何が次のとおりです:

, 58, 63, 66, 66, 81, 85, 86, 86, 89, 90, 90, 

この種の連結は関数では機能しませんPHPの変数で、私は別の方法でそれを行う必要があります。

ありがとうございます!

EDIT:要求されたよう

、ここでは関数consultaSimplesRetornaStringは(だ)と$ SQLパラメータ: (機能が正常に動作している、私は文書全体を通してそれを使用)。

function consultaSimplesRetornaString($sql) 
{ 
    // Connecting to te db 
    $conn = connect(); 
    $result = $conn->query($sql); 
    if (!$result) 
    echo $conn->error; 

    $aux = 0; 
    while ($row = $result->fetch_assoc()) { 
    $array[$aux] = $row["count"]; 
    $aux++; 
    } 

    $str = ""; 
    foreach($array as $key => $value) { 
    $value = round($value, 2); 
    $str.= "$value ,"; 
    } 

    $conn->close(); 
    echo ($str); 
} 

そして、ここでは、$ SQLパラメータです:

$ anoSelecionadoPOSTと$ unidadeは、単純な変数であり、かつうまく働いています。

$sql = "SELECT COUNT(distinct curso) AS count FROM `$anoSelecionadoPOST` WHERE `ano_ingresso`= '$anoSelecionadoPOST' and `Regional` = '$unidade'"; 
+4

ショー 'consultaSimplesRetornaStringを()'と '$のsql'の値を開始しているでしょうか? –

+0

@MarcinOrlowski質問を編集しました。 –

+0

以下の答えを見てください –

答えて

1

consultaSimplesRetornaString関数のecho ($str);のためです。だから最初に関数の結果をエコーし​​、echo $ dados;

これを試してみてください:

$dados = []; 
if ($unidade == 'Goiânia') { 
    $dados = [58, 63, 66, 66, 81, 85, 86, 86, 89, 90, 90]; 
} elseif ($unidade == 'Jataí') { 
    $dados = [11, 15, 18, 20, 21, 23, 23, 24, 24, 25, 25]; 
} elseif ($unidade == 'Catalão') { 
    $dados = [9, 14, 16, 19, 24, 25, 25, 25, 25, 26, 26]; 
} elseif ($unidade == 'Goiás') { 
    $dados = [1, 1, 1, 1, 3, 3, 3, 3, 5, 6, 7]; 
} 
// Fill the array with the function results from DB 
// the function returns an array. 
$dados = consultaSimplesRetorna($sql, $dados); 
echo join(',', $dados); 

function consultaSimplesRetorna($sql, $result = null) 
{ 
    // Connecting to te db 
    $conn = connect(); 
    $rowset = $conn->query($sql); 
    if (!$rowset) echo $conn->error; 
    if (!$result) $result = []; 
    while ($row = $rowset->fetch_assoc()) { 
    $result[] = $row["count"]; 
    } 
    $conn->close(); 
    return $result; 
} 
1

あなたのデータベースは、コードがむしろ機能するはずであるため、データが壊れていると思います。特に、この行は、臭い:

$array[$aux] = $row["count"] 

、それがクエリ結果から来ているものは何でもしてあなたの$arrayを移入などを。そのループにvar_dump($row['count']);を追加して、追加された各値が何であるかを確認し、データベースの内容を修正するか、「count」の数値がない場合は空のデータを使用しないようにチェックします(または0を使用します)。

また、ループ内の接着剤含有量は、$arrayである。そのためにはimplode()を使用してください。

PS:一般的にconsultaSimplesRetornaString()は、エラー処理に関してかなり悪いコードです。

+0

はい、かなり悪いです。私はこの機能をプロジェクトの初めにやったので、私はPHPでうまくいきませんでした(これは私の最初のプロジェクトです)。私はそれに何の問題もなかったので、私はそれをより良くする気には決してしませんでした。私は今それで作業します。アドバイスありがとうございます。 –

+0

コードの品質とは別に、私の答えがあなたの問題を解決するかどうかを教えてください。もしそうなら、それを受け入れてください(https://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) –

関連する問題