这个foreach循环有什么问题?

时间:2011-07-03 17:44:56

标签: php arrays foreach

为什么这个数组不起作用?我做错了什么?我的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>'; }

5 个答案:

答案 0 :(得分:2)

$ array只有两个属性,somesome2。因此,你的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)

Emil有正确的答案:D。我喜欢人们如此快速地在这里发帖大声笑。