为什么这个数组不起作用?我做错了什么?我的foreach循环的结果总是空的或只是一些奇怪的数字和符号。那么我的foreach循环有什么问题呢?
$array = array();
while($row = mysqli_fetch_array($result)) {
if(!empty($row["some"])) {
$array["some"] = $row["some"];
$array["some2"] = $row["some2"];
}
}
foreach($array as $property=>$value) {
echo '<p>'.$value["some"].' - '.$value["some2"].'</p>'; }
答案 0 :(得分:2)
$ array只有两个属性,some
和some2
。因此,你的foreach循环没有任何意义。 foreach将循环两次,第一次使用:
$property = 'some';
$value = $row["some"];
和第二个:
$property = 'some2';
$value = $row["some2"];
你必须通过这样做在第一个循环中使$ array多维:
while($row = mysqli_fetch_array($result)) {
$new = array();
if(!empty($row["some"])) {
$new["some"] = $row["some"];
$new["some2"] = $row["some2"];
$array[] = $new;
}
}
或更短:
while($row = mysqli_fetch_array($result)) {
if(!empty($row["some"])) {
$array[] = array('some' => $row["some"],
'some2' => $row["some2"]);
}
}
答案 1 :(得分:1)
$array["some"]
和$array["some2"]
是特定的数组元素。你在while循环的每次迭代中都会覆盖它们。
不确定你想要实现什么,但我想这可能就是你想要的:
$array = array();
while($row = mysqli_fetch_array($result)) {
if(!empty($row["some"])) {
$array["some"][] = $row["some"];
$array["some2"][] = $row["some2"];
}
}
foreach($array["some"] as $property=>$value) {
echo '<p>'.$value.' - '.$array["some2"][$property].'</p>';
}
或
$array = array();
while($row = mysqli_fetch_array($result)) {
if(!empty($row["some"])) {
$array[] = array('some' => $row["some"],
'some2' => $row["some2"]);
}
}
foreach($array as $property=>$value) {
echo '<p>'.$value['some'].' - '.$value['some2'].'</p>';
}
或类似......有点取决于你最终想要完成的事情......
答案 2 :(得分:0)
这并不能解释奇怪的数字和符号,但是你会在每次循环迭代时覆盖$array['some'] and $array['some2']
。
相反,试试这个:
while($row = mysqli_fetch_array($result)) {
if(!empty($row["some"])) {
$array[] = array("some"=>$row['some'], "some2"=>$row['some2']);
}
}
答案 3 :(得分:0)
$array[] = array('some' => $row["some"], 'some2' => $row["some2"]);
但最好只检索这些列。
答案 4 :(得分:0)