Проблема 1:
массив(670006151,670006152,670006251)
вывод: 670006151,152,251
Проблема 2:
массив(670006151,670006154,670006158)
вывод: 670006151,4,8
Проблема 3:
массив(670006151,670006154,670006161)
вывод: 670006151,54,61
кто-нибудь знает, как получить вывод из разных массивов, мне нужно найти общий номер с самого начала, а затем добавить другие элементы в вышеуказанных задачах 670006 является общим во всем, это может быть любое число...
Итак, самый длинный общий префикс среди строк?
Каков желаемый результат для array(670006151,670006151,670006151)
?
Спасибо, @nice_dev.
Спасибо, @nick оба решения работают
Один из способов сделать это — разделить каждое из чисел на возрастающую степень 10, остановившись, когда результат будет одинаковым для каждого из них. Затем вычтите этот результат, умноженный на мощность, от 2-го до последнего элемента массива:
function common_parts($data) {
for ($b = 1; ; $b *= 10) {
$base = intdiv($data[0], $b);
$matches = array_filter($data, function ($v) use ($b, $base) { return intdiv($v, $b) != $base; });
if (count($matches) == 0) break;
}
$base *= $b;
for ($i = 1; $i < count($data); $i++) {
$data[$i] = $data[$i] - $base;
}
return $data;
}
print_r(common_parts(array(670006151,670006152,670006251)));
print_r(common_parts(array(670006151,670006154,670006158)));
print_r(common_parts(array(670006151,670006154,670006161)));
Выход:
Array
(
[0] => 670006151
[1] => 152
[2] => 251
)
Array
(
[0] => 670006151
[1] => 4
[2] => 8
)
Array
(
[0] => 670006151
[1] => 54
[2] => 61
)
ВАУ... не буду публиковать свое решение
Вы должны - всегда приятно видеть несколько способов решения проблемы
Фрагмент:
<?php
function getPrefixedData($arr){
if (count($arr) == 0) return [];
$longest_prefix = strval($arr[0]);
foreach($arr as $val){
$val = strval($val);
$len = strlen($longest_prefix);
for($i=0;$i<$len;++$i){
if ($longest_prefix[$i] != $val[$i]){
$longest_prefix = substr($longest_prefix,0,$i);
break;
}
}
}
$res = [];
$len = strlen($longest_prefix);
foreach($arr as $index => $val){
if ($index == 0) $res[] = $longest_prefix . substr(strval($val),$len);
else $res[] = substr(strval($val),$len);
}
return $res;
}
Не могли бы вы написать свой проверенный, воспроизводимый код php в своем вопросе?