Управлять последней итерацией foreach внутри foreach - PullRequest
1 голос
/ 14 марта 2012

Я создал массив из трех переменных, которые я получаю через цикл foreach.

//loop through each post
foreach($loop as $p){
    //get the meta and taxonomy data
     $term_list = get_the_term_list($p, "mountains",true);
     $name = trim($term_list, "1");
     $wtr_long = get_post_meta($p,"wtr_longitude",true);
     $wtr_lat = get_post_meta($p,"wtr_latitude",true);

    //Add to Array
    $map_array[] = array ($name => $wtr_lat . "|" . $wtr_long);

}

Теперь этот массив должен доставлять данные, которые будут заполнять мою Карту Google, для этого я использую следующий код.

                foreach( $map_array as $a){
                       foreach ($a as $key => $value) { 
                                    $pieces = explode("|", $value);
                                    $trimmed_key = trim($key, "1");
                                    $name = trim($trimmed_key);
                       ?>

                                    {latitude: <?php echo $pieces[0]; ?>,
                                    longitude: <?php echo $pieces[1]; ?>,
                                    html: <?php echo $name; ?>},
                    <?php }} ?>

Это работает почти нормально (хотя это, вероятно, не самый чистый код, советы по этому вопросу также будут оценены). У меня проблема в том, что в последней итерации foreach внутри другого foreach мне нужно добавить ], в результате чего:

html: <?php echo $name; ?>}],

Я могу избежать одного foreach, но выполнение этого на foreach внутри foreach сводит меня с ума. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 15 марта 2012

atbyrd, ваш подход дал мне пару новых проблем, но, в конце концов, привел к рабочему решению.Спасибо вам за это.

Ниже кода, который устранил проблему, надеемся, что она будет полезна кому-то еще в будущем.

//Add to Array
$map_string .= '{latitude: "' . $wtr_lat . '", longitude: "' . $wtr_long . '", html: "' . $name .'"},~!~';
//$map_string .= '{latitude: "' . $wtr_lat . '", longitude: "' . $wtr_long . '", html: "name"},~!~';
}

//Remove last three "~!~" characters from the string not to have one too many arrays when exploding
$clean_map_string = substr($map_string, 0, -3);

//Now I can explore on ~!~ to get a new array with the correct strings
$map_array = explode('~!~', $clean_map_string);
$i = 0;
$length = count($map_array)-1;

//Inserts all the markers
foreach($map_array as $value){
if( $i != $length ){
echo $value;
}
else {
echo str_replace("},", "}],", $value);
}
$i++;
1 голос
/ 14 марта 2012

Я не php develeopor, но вы можете создать коллекцию строк, которые вы хотите воспроизвести в первую очередь. После завершения сбора вы можете добавить ']' последний элемент. Затем проследите каждый элемент в вашей коллекции строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...