2017-02-10 39 views
0

我想连接从另一个字符串函数返回的字符串,但问题是,而不是连接在字符串的末尾,它插入函数返回的值在字符串的开始。PHP - 为什么在开始时连接?

这里是一块做的代码:

$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变量,我应该做的另一种方式。

谢谢!

编辑:

按照要求,这里的功能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']);以验证每个增加的值,并修复数据库内容,或者如果这种情况没有“计数”数字,请执行一些检查以防止使用空数据(或使用0代替)。

而且,在一个循环胶合$array内容是一种浪费。你应该使用implode()

PS:一般来说consultaSimplesRetornaString()是非常糟糕的代码,在错误处理方面。

+0

是的,这很糟糕。在项目开始时我做了这个功能,所以我不擅长php(这是我的第一个项目)。因为我从来没有遇到过任何问题,所以我从不在意它做得更好。我现在就开始工作。谢谢你的建议。 –

+0

除了代码质量,让我知道如果我的答案解决您的问题。如果有,请[接受](https://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) –

相关问题