晚上好球员,使用array_splice导致“未定义偏移”误差
目前正在对一段代码,如果条件满足,将被删除阵列。在使用array_unset尝试之后,我决定使用array_splice不破坏id结构。不幸的是我有同样的问题:
E_NOTICE : type 8 -- Undefined offset: 5 -- at line 59
E_NOTICE : type 8 -- Undefined offset: 5 -- at line 60
偏移队伍从5到2
说明:要理解我在做什么在这里,我给一个简短的解释。使用给定的x坐标和y坐标,我的小程序应该遍历数组元素以查找离开始城镇最近的城市。最近的点将成为新的起点,并从城市阵列中移除,因为它已经被访问过。整个过程再次开始,直到城市阵列中没有其他元素。这就像旅行推销员问题。
现在我想解决它,但我不知道如何也不明白这个问题。我读了关于使用array_values,它不起作用。
$cities = array
(
(0) => Array(
('city') => 'San Francisco',
('x_cord') => '22',
('y_cord') => '28',
),
(1) => Array(
('city') => 'Oakland',
('x_cord') => '15',
('y_cord') => '13',
),
(2) => Array(
('city') => 'Stanford',
('x_cord') => '5',
('y_cord') => '2',
),
(3) => Array(
('city') => 'Palo Alto',
('x_cord') => '17',
('y_cord') => '15',
),
(4) => Array(
('city') => 'San Jose',
('x_cord') => '5',
('y_cord') => '2',
),
(5) => Array(
('city') => 'Marin',
('x_cord') => '22',
('y_cord') => '28',
),
(6) => Array(
('city') => 'Sacramento',
('x_cord') => '30',
('y_cord') => '40',
)
);
$curCit = "San Francisco";
$key = array_search('Oakland', array_column($cities, 'city'));
$curX = $cities[$key]['x_cord']; //3;
$curY = $cities[$key]['y_cord']; //4;
$hv = 0;
$distance = 0;
$row_city = 0;
$way = array();
$counter = count($cities);
while ($counter>0) {
for ($i = 5; $i >= 0; $i--) {
global ${"value_" . $i};
//${"value_" . $i} = $cities[$i][1]+$cities[$i][2];
${"value_" . $i . "x"} = $curX - $cities[$i]['x_cord'];
${"value_" . $i . "y"} = $curY - $cities[$i]['y_cord'];
${"value_" . $i} = sqrt(${"value_" . $i . "x"}*${"value_" . $i . "x"} + ${"value_" . $i . "y"}*${"value_" . $i . "y"});
if ($hv == 0) {
//global $hv;
$hv = ${"value_" . $i};
}
elseif ($hv > 0) {
if (${"value_" . $i}<$hv) {
//global $hv;
$hv = ${"value_" . $i};
$distance = $distance + $hv;
$row_city = $i;
$curX = $cities[$i]['x_cord']; //3;
$curY = $cities[$i]['y_cord']; //4;
$newdata = array (
'next_city' => $cities[$i]['city'],
'nxt_cty_xcord' => $cities[$i]['x_cord'],
'nxt_cty_ycord' => $cities[$i]['y_cord'],
'distance' => ${"value_" . $i}
);
//array_push($way,$newdata);
array_push($way,$newdata);
array_splice($cities, $i);
$cities = array_values($cities);
} //end 2nd if-clause
echo number_format(${"value_" . $i},2);
echo " ";
echo "HV ";
echo number_format($hv,2);
echo "<br>";
$hv = 0;
} //end 1st if-clause
} //end for-clause
$counter--;
} //end while-loop
print_r($cities);
echo "<br>";
print_r($way);
该代码是不完美的,因为我仍然工作。但是从城市多维数组中删除数组元素的问题阻止了我。
任何人都可以提供帮助和建议吗? 如果你喜欢推荐array_values,那么请尝试一下并且可能犯了一个错误。
在此先感谢。
编辑:虽然如果我把array_splice放在我赋值给的变量后面会是一个解决方案。
推荐阅读:http://stackoverflow.com/help/mcve – wogsland
的问题是,你想从$城市的读取元件在行'$ {“value_”处。 $ i。 “x”} = $ curX - $ cities [$ i] ['x_cord'];''$ {“value_”。 $ i。 “y”} = $ curY - $ cities [$ i] ['y_cord'];'目前不存在,因为它与'array_splice($ cities,$ i);'拼接在一起。试着解释你想要达到什么目标,因为必须有比这一堆IF更好的方法...... –
@HonzaRydrych:在帖子中增加了一个额外的解释。如果我需要改进解释,请告诉我。也许它还不够精确。 是的,这是不幸的问题,但认为,如果在脚本从第1行到第xy个“正在运行”时将值赋予变量,则将剪接定位。 wogsland:对不起= ^} – nucky