Я получаю адрес и имя из базы данных, и я хочу сортировать результаты на основе расстояния, которое рассчитывается API Карт Google после того, как он получает адресат от запроса. В настоящее время он отображает следующие сообщения об ошибках 4 раза (повторяя их):
Warning: Illegal string offset 'routes' in C:\xampp\htdocs\app2\test.php on line 36
Warning: Illegal string offset 'legs' in C:\xampp\htdocs\app2\test.php on line 36
Warning: Illegal string offset 'distance' in C:\xampp\htdocs\app2\test.php on line 36
Warning: Illegal string offset 'text' in C:\xampp\htdocs\app2\test.php on line 36
Печатный массив отображается после ошибок и выглядит так:
Array ( [0] => 0.3 km [1] => 1.7 km )
Я хочу, чтобы результатом было имя ($row['name'])
и количество километров, отсортированных по возрастанию в зависимости от километров. Как должен выглядеть мой смысл, чтобы достичь этого? Или есть проблема где-то еще?
Вот мой код:
<?php
require_once 'includes/session.php';
require_once 'includes/config.php';
require_once 'includes/design_query.php';
include_once 'includes/header.php';
include_once 'includes/menu.php';
//$origin = $_COOKIE['origin'];
//$id=$_GET['id'];
$origin = "Bucuresti+Avrig+30";
$id = 3;
$query = ("SELECT * FROM locations WHERE category_id='$id'");
$result = mysql_query($query) or die (mysql_error());
while($row = mysql_fetch_array($result))
{
$address = $row['Judet'] . '+' . $row['Localitate'] . '+' . $row['Strada'] . '+' . $row['Numar'];
$address = str_replace(' ', '+', $address);
$fullurl = 'http://maps.googleapis.com/maps/api/directions/json?origin=' . $origin . '&destination=' . $address . '&alternatives=true&sensor=true';
$json_a = json_decode((file_get_contents($fullurl)),true);
asort($row);
//echo $row['name'];
//echo "<span class='badge'>" . $json_a['routes'][0]['legs'][0]['distance']['text'] . "</span></button>";
$whole_data[] = $json_a['routes'][0]['legs'][0]['distance']['text'];
}
function cmp($a, $b)
{
if ($a['routes'][0]['legs'][0]['distance']['text'] == $b['routes'][0]['legs'][0]['distance']['text']) {
return 0;
}
return ($a['routes'][0]['legs'][0]['distance']['text'] < $b['routes'][0]['legs'][0]['distance']['text']) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($whole_data, "cmp");
print_r($whole_data);
include_once 'includes/footer.php';
include_once 'includes/scripts.php';
?>
Прежде всего позвольте мне сказать, что этот код беспорядок! Видя прокомментированную строку, в которой идентификатор получен из GET, также становится понятным, что он будет подвержен внедрению sql.
В любом случае, это попытка сделать так, как вам хочется (только важные части):
while($row = mysql_fetch_array($result))
{
$address = $row['Judet'] . '+' . $row['Localitate'] . '+' . $row['Strada'] . '+' . $row['Numar'];
$address = str_replace(' ', '+', $address);
$fullurl = 'http://maps.googleapis.com/maps/api/directions/json?origin=' . $origin . '&destination=' . $address . '&alternatives=true&sensor=true';
$json_a = json_decode((file_get_contents($fullurl)),true);
$whole_data[] = array("name" => $row["name"], "value" => $json_a['routes'][0]['legs'][0]['distance']['value'], "text" => $json_a['routes'][0]['legs'][0]['distance']['text']);
}
function cmp($a, $b)
{
if ($a['value'] == $b['value']) {
return 0;
}
return ($a['value'] < $b['value']) ? -1 : 1;
}
usort($whole_data, "cmp");
// example print
foreach($whole_data as $row){
echo "$row[name] $row[text] <br/>";
}