在foreach的初始化时返回循环

时间:2014-06-02 15:12:13

标签: php

我想在循环的init处返回,当数组的计数为10时,我需要将其打印出来。
我不确定是否可能因为,返回是在foreach循环之外。

感谢您的建议。

这是我目前的代码:

<?php

error_reporting(0);
include_once('include.php');

$link=connect_db();
//butta in un array tutti i forecast e usa print_r(array_count_values($array));
//fai un foreach che per ogni previsione fa partire una query con variabi $limit che è il parametro di ff.previsione e il LIMIT 0,$limit


$get_values = "select previsione from forecast where data='2014-05-30'";
$res_values = mysql_query($get_values,$link);
$arr_vals = array();

while( $values = mysql_fetch_assoc($res_values) ) {
        array_push($arr_vals, $values['previsione']);       
    }

$new_array = array();
foreach ( $arr_vals as $key => $value ) {
    $limit = $value;

    $sel = "select min(op.cognome) as cogg,
                                      op.nome,
                                      op.cognome,
                                      op.ore_giornaliere_time,
                                      ff.ora,
                                      ff.previsione 
            from 
                 operatori op
            join 
                 turni_preconf tp on tp.tot_ore = op.ore_giornaliere
            join 
                 forecast ff on tp.inizio=ff.ora 
            where
                 ff.data='2014-05-30' and ff.previsione=$limit 
            group by op.cognome
            order by rand()
            limit 0,$limit";

$res_sel=mysql_query($sel,$link);


while( $er = mysql_fetch_array($res_sel) ) {

    echo $er['nome'].' '.$er['cognome'].':  '.remove_sec($er['ora']).'/'.sumatra($er['ora'], $er['ore_giornaliere_time']).'<br>';
    $nomecognome = $er['nome'].$er['cognome'];
    $orario = $er['ora'].'-'.sumatra($er['ora'], $er['ore_giornaliere_time']);

    array_push($new_array, array($nomecognome => $orario)); 

   //$new_array[$nomecognome] = $orario;


    }
}
var_dump($new_array);

echo'<br>';

$array2 = call_user_func_array('array_merge', $new_array);
echo count($array2);
if(count($array2) == 10){
        var_dump($array2);
    }
if(count($array2) != 10){
        //RETURN FROM ??? HELP...
    }

//butta nome cognome ora_inizio/ora_fine nel seguente modo [nomecognome]=>"ora_inizio-ora_fine" e rimuovi le chiavi duplicate preservando l'ordine
?>

1 个答案:

答案 0 :(得分:0)

我仍然不确定你的意思,但是听起来(对我而言)你尝试在完全长度为10之后打印出阵列。否则你想要再次运行foreach循环直到有10个数组中的元素?

如果这是你的意思那么我会考虑把你的foreach放在do {} while()循环中。

与此相似: 编辑:[UNTESTED不确定它是否正常工作]

<?php
//some code

do{
      //code that should repeat until arraylength == 10 goes in here
      foreach(...)
      .
      .
      .
}while( count($array2) == 10 );

//no need for a second if statment,
//cause it only gets executet if we get out of the loop.
var_dump($array2); 

//some other code that gets executed
.
.
.
?>

现在你的代码:

<?php

error_reporting(0);
include_once('include.php');

$link=connect_db();
//butta in un array tutti i forecast e usa print_r(array_count_values($array));
//fai un foreach che per ogni previsione fa partire una query con variabi $limit che è il parametro di ff.previsione e il LIMIT 0,$limit


$get_values = "select previsione from forecast where data='2014-05-30'";
$res_values = mysql_query($get_values,$link);
$arr_vals = array();

while( $values = mysql_fetch_assoc($res_values) ) {
        array_push($arr_vals, $values['previsione']);       
    }

// START REPEAT until count($array2) == 10
do{
$new_array = array();
foreach ( $arr_vals as $key => $value ) {
    $limit = $value;

    $sel = "select min(op.cognome) as cogg,
                                      op.nome,
                                      op.cognome,
                                      op.ore_giornaliere_time,
                                      ff.ora,
                                      ff.previsione 
            from 
                 operatori op
            join 
                 turni_preconf tp on tp.tot_ore = op.ore_giornaliere
            join 
                 forecast ff on tp.inizio=ff.ora 
            where
                 ff.data='2014-05-30' and ff.previsione=$limit 
            group by op.cognome
            order by rand()
            limit 0,$limit";

    $res_sel = mysql_query($sel,$link);


    while( $er = mysql_fetch_array($res_sel) ) {

        echo $er['nome'].' '.$er['cognome'].':  '.remove_sec($er['ora']).'/'.sumatra($er['ora'], $er['ore_giornaliere_time']).'<br>';
    $nomecognome = $er['nome'].$er['cognome'];
    $orario = $er['ora'].'-'.sumatra($er['ora'], $er['ore_giornaliere_time']);

        array_push($new_array, array($nomecognome => $orario)); 

        //$new_array[$nomecognome] = $orario;
        }
    }
    var_dump($new_array);

    echo'<br>';

    $array2 = call_user_func_array('array_merge', $new_array);
    echo count($array2);

}while(count($array2) != 10) //END OF REPEAT
var_dump($array2);

//butta nome cognome ora_inizio/ora_fine nel seguente modo [nomecognome]=>"ora_inizio-ora_fine" e rimuovi le chiavi duplicate preservando l'ordine
?>

希望这有帮助。