2012-03-13 4 views
1

Я создал массив из трех переменных, которые я получаю через цикл foreach.Манипулировать последнюю итерацию foreach внутри 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 }} ?> 

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

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

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

ответ

1

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

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

+1

Не нужно быть разработчиком php. Иногда явная логика может управлять вами в правильном направлении. Теперь я пытаюсь использовать другой подход, основанный на вашем комментарии, где я пытаюсь создать строки, которые я хочу выводить внутри массива. Если теперь я могу придумать один массив, я могу легко поймать последнюю итерацию. – WouterB