【发布时间】:2016-10-12 22:27:43
【问题描述】:
我有一个解决方案,它采用m-element array 返回一个均匀分布的n-element array。但是对于 m 的某些值,它会生成 stderr。
例如,如果数组有 15 个元素,那么stderr 将是:
class SpredArrayClass
{
var $array = [1,2,3,4,5,6,7,8,9,9,10,11,12,13,14,15];
function spreadOutArray(array $array = [], $targetOutputLength = 10) {
$array = $this->array;
$originalArrayLength = count($array);
if ($originalArrayLength == 0) {
return false;
}
if ($originalArrayLength <= $targetOutputLength) {
return $array;
}
$output = [];
$interval = round($originalArrayLength / $targetOutputLength);
for ($index = $originalArrayLength - 1; count($output) < $targetOutputLength; $index -= $interval) {
$output[] = $array[$index];
}
return array_reverse($output);
}
}
问题似乎出在这部分:
$output = [];
$interval = round($originalArrayLength / $targetOutputLength);
for ($index = $originalArrayLength - 1; count($output) < $targetOutputLength; $index -= $interval) {
$output[] = $array[$index];
}
Undefinded offset stderr 出现在这一行:$output[] = $array[$index];
演示代码执行在这里:http://ideone.com/UrF9UK
【问题讨论】:
-
听说过
range()吗? -
您可以使用 php 的范围(如正确提示的 @PHPglue)让您的生活更轻松......
-
似乎新的编码考试即将到来或类似。在今天之前,使用相同措辞的类似问题已经被问过两次......
-
不能为每个“步长”($interval)使用一个固定的值,同时保证正确的输出长度。
-
解释均匀分布是什么意思。
array_splice()?