如何在PHP中生成嵌套关联数组?
我问了一个问题,非常感谢他对其中SQL部分的完整回答 问题 我有一个sql表(主键为[ip&id]),如下所示:如何在PHP中生成嵌套关联数组?,php,arrays,string,associative-array,explode,Php,Arrays,String,Associative Array,Explode,我问了一个问题,非常感谢他对其中SQL部分的完整回答 问题 我有一个sql表(主键为[ip&id]),如下所示: ip | id | visits product_rating_for_ip = array( ip=>array( id=>rating, id=>rating, ... ), ip=>array( id=>rating, id=>rating, ... ), . . . ); 我想从该表生成一个p
ip | id | visits
product_rating_for_ip = array(
ip=>array(
id=>rating, id=>rating, ...
),
ip=>array(
id=>rating, id=>rating, ...
),
.
.
.
);
我想从该表生成一个php数组,如下所示:
ip | id | visits
product_rating_for_ip = array(
ip=>array(
id=>rating, id=>rating, ...
),
ip=>array(
id=>rating, id=>rating, ...
),
.
.
.
);
例如:
product_rating_for_ip = array(
"78.125.15.92"=>array(
1=>0.8,2=>0.2,3=>1.0
),
"163.56.75.112"=>array(
1=>0.1,2=>0.3,3=>0.5,8=>0.1,12=>1.0
),
.
.
.
);
Gordon Linoff建议使用此SQL查询,该查询工作正常:
SQL查询
这就产生了:
+-------------+--------------------------+
|ip |ratings |
+-------------+--------------------------+
|154.18.72.15 |2:0.1667,1:1.0000,3:0.1667|
|162.16.18.22 |1:1.0000,3:0.3750,2:0.1250|
|142.128.1.14 |2:1.0000,1:0.2500,3:0.5000|
|78.15.92.131 |1:0.1429,3:1.0000,2:0.2857|
+-------------+--------------------------+
问题摘要
如何将此结果集放入此PHP数组中
product_rating_for_ip = array(
ip=>array(
id=>rating, id=>rating, ...
),
ip=>array(
id=>rating, id=>rating, ...
),
.
.
.
);
我有问题的答案
我认为我应该这样做(可能不正确或效率低下):
它不是复制品。由于SQL部分有一个答案,我接受了它,没有人会来帮助php部分。因此,我提出了第二个问题,集中讨论php part.Hrm,即“每个问题一个可接受的答案”问题。看到同一个问题贴了两次还是很烦人的,尽管如果可以的话我会撤销我的标志。如有必要,我将接受无效标志@Nate我从第一个问题中删除了php部分。现在可以了吗?@内特,请考虑修改你对这个问题的修改,如果可能的话,我处理了与先前问题的冲突。谢谢:)遗憾的是,撤销一个标志是不可能的,但我确实删除了“这是重复的”评论。不管是谁来主持会议,都很可能看到这些评论,而不去理会你的帖子。很抱歉,我也很高兴看到这个。谢谢,但我认为它和我自己的代码是一样的。它将数组输出为
ip=>array(“id:value”,“id:value”,…)
但是我想要的是ip=>array(id=>value,id=>value,…)
它有一个小问题id
s是产品id,例如1、2、8,但此代码返回0、1、2,这应该已经修复了它。
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt,$ip,$ratings);
$product_rating_for_ip = array();
while (mysqli_stmt_fetch($stmt)){
$value_array = explode(",",$ratings);
foreach ($value_array as $key => $value){
$parts = explode(':', $value);
$product_rating_for_ip[$ip][$parts[0]] = $parts[1];
}
}