44 lines
830 B
PHP
44 lines
830 B
PHP
|
<?php
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @param array $array
|
||
|
* @return array|bool
|
||
|
*/
|
||
|
function array_flatten(array $array) {
|
||
|
return iterator_to_array(array_flatten_iterator($array), false);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $array
|
||
|
* @return Generator
|
||
|
*/
|
||
|
function array_flatten_iterator(array $array) {
|
||
|
foreach ($array as $value) {
|
||
|
if (is_array($value)) {
|
||
|
yield from array_flatten_iterator($value);
|
||
|
} else {
|
||
|
yield $value;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param int $x1
|
||
|
* @param int $y1
|
||
|
* @param int $x2
|
||
|
* @param int $y2
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
function getPointsBetween(int $x1, int $y1, int $x2, int $y2)
|
||
|
{
|
||
|
$dx = $x2-$x1;
|
||
|
$dy = $y2-$y1;
|
||
|
$max = max(abs($dx), abs($dy));
|
||
|
for($t = 0; $t<=$max; $t++) {
|
||
|
$points[] = sprintf('%s,%s', $x1+($t*$dx)/$max, $y1+($t*$dy)/$max);
|
||
|
}
|
||
|
|
||
|
return $points;
|
||
|
}
|