В чем проблема с этим циклом foreach? - PullRequest
0 голосов
/ 03 июля 2011

почему этот массив не работает?Что я делаю не так?Результат моего цикла 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 ]

2 голосов
/ 03 июля 2011
Массив

$ будет иметь только два свойства, some и some2.Поэтому ваш цикл foreach не имеет никакого смысла.Foreach будет зацикливаться два раза, первый раз с этим:

$property = 'some';
$value = $row["some"];

, а второй с этим:

$property = 'some2';
$value = $row["some2"];

В первом цикле вам нужно будет сделать многомерный массив $делать это:

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 голос
/ 03 июля 2011

$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>'; 
}

или аналогичный ... вроде зависит от того, чего вы в конечном итоге пытаетесь достичь ...

0 голосов
/ 03 июля 2011

Эмиль имеет правильный ответ: D.Мне нравится, как люди так быстро публикуются здесь. LOL.

0 голосов
/ 03 июля 2011
$array[] = array('some' => $row["some"], 'some2' => $row["some2"]);

Но было бы лучше получить только эти столбцы.

0 голосов
/ 03 июля 2011

Это не объясняет странные цифры и знаки, но вы перезаписываете $array['some'] and $array['some2'] на каждой итерации цикла.

Вместо этого попробуйте это:

while($row = mysqli_fetch_array($result)) {
    if(!empty($row["some"])) {
        $array[] = array("some"=>$row['some'], "some2"=>$row['some2']);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...