Что происходит с моим массивом результатов здесь? Я ожидал, что размер массива результатов будет равен входному массиву, но его недостающие 3 записи .. куда они пошли? они не ходили в $ RET, так как они должны были ..Что происходит с моим массивом? элементы исчезают
код:
<?php
init();
$list_xy = array(
0 => array(
'id' => '308',
'x' => '37',
'y' => '63'
),
1 => array(
'id' => '963',
'x' => '38',
'y' => '134'
),
2 => array(
'id' => '385',
'x' => '39',
'y' => '132'
),
3 => array(
'id' => '1231',
'x' => '50',
'y' => '199'
),
4 => array(
'id' => '788',
'x' => '51',
'y' => '59'
),
5 => array(
'id' => '1151',
'x' => '53',
'y' => '61'
),
6 => array(
'id' => '671',
'x' => '55',
'y' => '60'
),
7 => array(
'id' => '1487',
'x' => '55',
'y' => '55'
)
);
$sorted_list_xy = sort_by_xy_distance($list_xy);
$sorted_list_xy_size = count($sorted_list_xy, COUNT_NORMAL);
$list_xy_size = count($list_xy, COUNT_NORMAL);
var_dump($sorted_list_xy_size == $list_xy_size ? "looks right" : "something is wrong", $sorted_list_xy_size, $list_xy_size);
die("died");
function sort_by_xy_distance($input_list)
{
$ret = array();
$a = $input_list[0];
array_push($ret, $input_list[0]);
$input_list[0] = null;
$i = 1;
for ($i = 1; $i < count($input_list); ++$i) {
if ($input_list[$i] == null) {
echo 'already added to list..';
continue;
}
$ii = 1;
$tmpdistance = 0;
$nearest = array(
'index' => -1,
'distance' => PHP_INT_MAX
);
for ($ii = 1; $ii < count($input_list); ++$ii) {
if ($input_list[$ii] == null || $ii == $i) {
//echo 'already added to list..';
continue;
}
$tmpdistance = abs($input_list[$ii]['x'] - $a['x']) + abs($input_list[$ii]['y'] - $a['y']);
if ($tmpdistance < $nearest['distance']) {
$nearest['index'] = $ii;
$nearest['distance'] = $tmpdistance;
}
}
assert($nearest['index'] != -1);
array_push($ret, $input_list[$nearest['index']]);
$a = $input_list[$nearest['index']];
$input_list[$nearest['index']] = null;
}
return $ret;
}
function init()
{
error_reporting(E_ALL);
set_error_handler("exception_error_handler");
}
function exception_error_handler($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
// This error code is not included in error_reporting
return;
}
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
выход:
уже добавлен в list..already добавлен в list..already добавлено к list..string (18) "что-то не так" INT (5) Int (8) умер
ожидается выход: (что-то подобное)
уже добавлен в list..already добавлен в list..already добавлен в list..string (11) "выглядит правильно" Int (8) INT (8) умер
то, что я ожидал список, чтобы включить, чтобы: список, где разница в следующий-х [х] [у] как можно меньше, что было бы:
array(8) {
[0]=>
array(3) {
["id"]=>
string(3) "308"
["x"]=>
string(2) "37"
["y"]=>
string(2) "63"
}
[1]=>
array(3) {
["id"]=>
string(3) "788"
["x"]=>
string(2) "51"
["y"]=>
string(2) "59"
}
[2]=>
array(3) {
["id"]=>
string(4) "1151"
["x"]=>
string(2) "53"
["y"]=>
string(2) "61"
}
[3]=>
array(3) {
["id"]=>
string(3) "671"
["x"]=>
string(2) "55"
["y"]=>
string(2) "60"
}
[4]=>
array(3) {
["id"]=>
string(4) "1487"
["x"]=>
string(2) "55"
["y"]=>
string(2) "55"
}
[5]=>
array(3) {
["id"]=>
string(3) "385"
["x"]=>
string(2) "39"
["y"]=>
string(3) "132"
}
[6]=>
array(3) {
["id"]=>
string(3) "963"
["x"]=>
string(2) "38"
["y"]=>
string(3) "134"
}
[7]=>
array(3) {
["id"]=>
string(4) "1231"
["x"]=>
string(2) "50"
["y"]=>
string(3) "199"
}
}
я сосу на создание графических иллюстраций, но плохо дать ему тому назад. Это моя карта: map http://imagizer.imageshack.us/a/img633/3521/E0HGRe.png
Мне нужно посетить все черные точки. Это мой текущий путь:
этот путь не очень оптимальный .. здесь путь я хочу:
и это то, что функция сортировки пытается найти самый короткий путь к посетите все черные точки.
Я прочитал программный код много. Однако это может быть сделано легче, если есть «пробелы», чтобы разбить длинные строки на «токены». Вы предоставляете много кода. Могу ли я предложить вам отформатировать его в соответствии с некоторыми легко читаемыми стандартами? т. е. [Цель этого руководства - уменьшить когнитивное трение при сканировании кода у разных авторов. Он делает это, перечисляя общий набор правил и ожиданий о том, как форматировать PHP-код] (http://www.php-fig.org/psr/psr-2/). Пространства между вещами «хорошие». Люди читают и пишут код - облегчают ли вам понимание вашего кода? –
huh, на самом деле stackoverflow не позволяет мне заканчивать код пустой новой строкой: p .. во всяком случае, запускал его через phpformatter.com с PEAR-стилем, теперь он выглядит лучше? : o – hanshenrik
Спасибо за это :-) –