由于此行$params=array($data);
,以下代码无效。它需要除$ data之外的其他东西。或者它需要在此行之前使用$ data发生一些事情。
如果该行被写为$ params = array(“A”,“B”,“C”,“D”);然后它工作得很好,但我的数组是在$ data变量中,而不是像那样写出来的。如果有一种方法可以将数组转换为像这样写出来,那也可以。
最终结果应该显示数组内容的每种可能的组合(而不是排列)。就像上面的例子一样,它显示了ABC,BD等。
$data = mysql_query('SELECT weight FROM my_table WHERE session_id = "' . session_id() . '"');
$params=array($data);
$combinations=getCombinations($params);
function getCombinations($array)
{
$length=sizeof($array);
$combocount=pow(2,$length);
for ($i=1; $i<$combocount; $i++)
{
$binary = str_pad(decbin($i), $length, "0", STR_PAD_LEFT);
$combination='';
for($j=0;$j<$length;$j++)
{
if($binary[$j]=="1")
$combination.=$array[$j];
}
$combinationsarray[]=$combination;
echo $combination."<br>";
}
return $combinationsarray;
}
答案 0 :(得分:0)
好的,你的脚本有很多基本问题。我个人建议先read this article,然后再推荐actual function called mysql_fetch_array()。
简单地说,你从mysql收到的是资源(如果我错了,请告诉我!)你必须在那里获取数组。
$params = mysql_fetch_array($data);
PS:这没有意义:$params=array($data);
答案 1 :(得分:0)
mysql_query()
仅返回结果资源ID。要检索数据,必须使用“fetch”命令之一,例如
$params = array();
while ($row = mysql_fetch_assoc($data)) {
$params[] = $row['weight'];
}
此外,您的查询可能容易受到SQL注入攻击。我不会暗中信任session_id()
的价值。我不完全确定这一点,但它可能只是从会话cookie中检索值。
至少,使用mysql_real_escape_string()
清理价值。一个更强大的解决方案可以让你的代码脱离黑暗时代,就是使用PDO和参数绑定。
答案 2 :(得分:0)
$data
不是数组。假设mysql_query()
没有返回错误或空结果(顺便说一下,你应该检查两个mysql_error()
和mysql_num_rows()
的查找文档,也许还有其他一些), $data
是一种资源。
所以你希望$params=mysql_fetch_array($data)
使它成为一个数组。 (假设只有一个结果。如果它可能返回多行,你可能想要将它包装成循环。如果你100%确定session_id
是唯一的,那么你可以得到我猜想,如果你只关心多行结果中的第一个结果,你也可以在没有循环的情况下离开。虽然在这种情况下我会在查询中输入LIMIT 1
提高绩效。)
有很多选项(你想要一个数字索引的数组,或者它们的键是列的名称等),所以请阅读http://www.php.net/manual/en/function.mysql-fetch-array.php。