由于 $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;
}
最佳答案
mysql_query()
只返回一个结果资源 ID。要检索数据,您必须使用“获取”命令之一,例如
$params = array();
while ($row = mysql_fetch_assoc($data)) {
$params[] = $row['weight'];
}
此外,您的查询可能容易受到 SQL 注入(inject)攻击。我不会暗中相信 session_id()
的值。我不完全确定这一点,但它可能只是从 session cookie 中检索值。
至少,使用 mysql_real_escape_string()
清理值。将您的代码带出黑暗时代的更强大的解决方案是使用 PDO 和参数绑定(bind)。
关于php - 从 mysql 导入的数组有效,但 php 不能将数组用作数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7264925/