Изменение формата массива PHP, чтобы позволить зацикливание в умном времени - PullRequest
0 голосов
/ 03 мая 2011

Первое сообщение - я несколько дней пытался исследовать и бороться, но я не могу решить следующую проблему, где я добавил второй запрос Select, чтобы выполнить некоторые расчеты расстояния от моей начальной точки до пунктов назначения в пределах определенного диапазона. Я получаю выводхорошо, но не в fromat, я могу использовать - у меня есть существующий скрипт, который выводит массив и передает его в шаблон smarty - это работает нормально, поэтому я использовал это для отладки, что идет не так в моей первой попытке.

Я использую printf("<pre>%s</pre>", print_r($myarrayname, true)); для отладки и получаю следующий вывод

Array
(
    [firm] => company name 1
    [loc1] => Inverness
    [distance] => 0.800791320271485
)

Array
(
    [firm] => company name 2
    [loc1] => Inverness
    [distance] => 0.972151789782665
)

Array
(
    [firm] => company name 3
    [loc1] => Inverness
    [distance] => 1.04042401681383
)

и т. Д., Однако мой известный рабочий вывод выдает следующее с одним индексом и объединяет [firm] и [loc1] вместе (нопропуск имени индекса)

Array
(
    [html] => company name 1 Inverness
)

Array
(
    [html] => company name 2 Inverness
) 

Array
(
    [html] => company name 3 Inverness 
)

Может кто-нибудь подсказать, как я могу преобразовать этот массив в показанный формат.Надеюсь, здесь достаточно информации - не хотел разбрасывать страницу ненужными вещами

Вот код

<code>// Start of Nearby query
$lat = trim($_REQUEST['lat']);
$lng = trim($_REQUEST['lng']);

$lat = (!empty($lat)? $lat : 57.45666); // starting point Latitude
$lng = (!empty($lng)? $lng : -4.22137);// starting point Longitude

$HelpQuery = sprintf("SELECT firm, loc1, ( 3959 * acos( cos( radians( %s ) ) * cos( radians( lat ) ) * cos( radians( longit ) - radians( %s ) ) + sin( radians( %s ) ) * sin( radians( lat ) ) ) ) AS distance FROM $my_table WHERE state='apr'  HAVING distance > 0.01  ORDER BY distance LIMIT 1,5",$lat,$lng,$lat);

$HelpResult = mysql_query($HelpQuery);
$result = array();
$result['html'] = "";

if($HelpResult)
{
    while($Helprow = mysql_fetch_assoc($HelpResult))
            printf("<pre>%s
", print_r ($ Helprow, true)); // Печать в 3 строкикаждый из которых имеет свой собственный индекс - нужно объединить с одним индексом {$ Helprow ['distance'] = round ($ Helprow ['distance'], 2); $ result ['html'] [] = $ Helprow;}} else{$ result ['html'] = "Error";} // Конец листинга рядом с MOD

1 Ответ

0 голосов
/ 04 мая 2011

Следуя советам и указателям, я решил эту проблему с помощью нового кода, вставленного ниже. Вывод для отображения записей на заданном расстоянии от источника может найти здесь в нижней части страницы. Широта и долгота источника отображаются на каждой странице как переменная.

// Start of Nearby Accommodation query
$lat =  $vs_current_listing['lat'];
$lng = $vs_current_listing['longit'];


$firm_loop = sprintf("SELECT firm, loc1, id, ROUND( 3959 * acos( cos( radians( %s ) ) * cos( radians( lat ) ) * cos( radians( longit ) - radians( %s ) ) + sin( radians( %s ) ) * sin( radians( lat ) ) ) ,2) AS distance FROM $my_table WHERE state='apr' AND record_set='xxxx' HAVING distance BETWEEN 0.01 and 20  ORDER BY distance LIMIT 1,20",$lat,$lng,$lat);
$firm_loop = mysql_query($firm_loop);
for($x=0;$x<mysql_num_rows($firm_loop);$x++){ 
 $f_img = mysql_fetch_assoc($firm_loop);  
$f_firm[mod_firm]  = str_replace(" ","_",$f_img[firm]);
$vs_listfirm[$x][html] = "<a href=\"./$f_firm[mod_firm]-$f_img[id].html\"    title='$f_img [firm]'>" .$f_img[firm]." - ".$f_img[loc1]."  - ".$f_img[distance]."  miles  </a>"; 
}
$tpl-> assign('vs_listfirm',$vs_listfirm); 
// End of listing nearby  MOD

Раздел шаблона smarty, отображающий код, показан ниже, цветные шрифты и форматирование опущены для отображения основного кода.

{html_table_adv loop=$vs_listfirm cols=2 inner=cols table_attr='width=90% border=0 cellpadding=0 cellspacing=1'} [[html]] {/html_table_adv} 
...