1

有谁知道如何使用 FOREACH 循环来获取与标准相关的整个信息块:“大于”用户发布的数字(在本例中为 $metsq=$_POST['metersq'];)
例如,在我发布的代码,如果用户写90,它应该只输出
color - blue
msq - 100
city - Prague

我试过这段代码,但显然我没有太多经验。提前致谢!

<?php

if(isset($_POST['button'])){
    $houses = array(
        'house1'=>array(
        'color'=>'green',
        'msq'=>100,
        'city'=>'Prague'
    ),

        'house2'=>array(
        'color'=>'red',
        'msq'=>30,
        'city'=>'Belgrade'
    ),
        'house3'=>array(
        'color'=>'blue',
        'msq'=>50,
        'city'=>'London'
    ),
        'house4'=>array(
        'color'=>'blue',
        'msq'=>50,
        'city'=>'Belgrade'
    )
);

$col=$_POST['colors'];
$metsq=$_POST['metersq'];
$cit=$_POST['cities'];

foreach($houses as $house=>$data) {
    foreach($data as $key=>$value) {
        if($value>=$metsq) {
            echo "$key - $value </br>";
        }
    } 
} else {
    echo "Go, search";
}
?>


<form action="?" method="post">
<select name="colors" >

<option>green</option></br>
<option>blue</option></br>
<option>red</option></br>
</select>

<input type="number" name="metersq" id="metersq" maxlength="3" />m2</br>

<select name="cities">

<option>Prague</option></br>
<option>Belgrade</option></br>
<option>London</option></br>
</select>

<input type="submit" value="Find" name="button"id="button" />
4

3 回答 3

1

无需遍历房屋数据,只需遍历“msq”键:

foreach($houses as $house){
    if($house['msq']>=intval($metsq)){
        echo "msq - {$house['msq']} </br>";
    }
} 

此外,您可能需要使用intval确保它们是整数。

于 2013-02-26T01:00:35.027 回答
1

看起来您想将整个输出house1作为一组键/值对。

你非常接近:

foreach($houses as $house=>$data){
    if( $data['msq'] >= $metsq ) {
        foreach( $data as $key=>$value ) {
            echo "$key - $value <br>";
        }
    }
}

您遇到的问题是,您实际上只是在特定键满足您的条件时才输出数据。但是你正在做这样的比较blue >= 90,可能会产生意想不到的结果。

于 2013-02-26T01:03:16.927 回答
0

您不需要嵌套的 foreach 循环。您只需要msq像这样比较数组的每个房屋元素中的键:

foreach($houses as $house=>$data){
    if ($data['msq'] >= $metsq) {
        // found a matching house so do something with it
        var_dump($house, $data);
    }
}
于 2013-02-26T01:00:52.093 回答