Пожалуйста, будьте осторожны
Этот код сильно зависит от строгого формата ввода.Префиксы типа ++496151
не будут работать.Вам следует искать странные форматы в базе данных и исправлять их перед запуском этого кода!
Что-то вроде этого?Это код JavaScript, но он будет переведен в php
"use strict";
console.clear()
const input = [
{
prefix: "+49-6151",
number: "8844-057",
},
{
prefix: "0049-6151",
number: "8844-057",
},
{
prefix: "++49 06151",
number: "8844-057",
},
]
function fixPrefix(prefix) {
prefix = prefix
// remove leading '+', '++', and '00' and following digits
.replace(/^(\+{1,2}|00)\d+/, '')
// split at none digits
.split(/\D/)
// remove empty elements
.filter(i=>i)
// rejoin
.join()
// add one lleading zero if none is present
.replace(/^(?!0)/, 0)
return prefix
}
function fixNumber(number) {
number = number
// split at any none digit
.split(/\D/)
// remove empty elements
.filter(i=>i)
// rejoin with space in between
.join(" ")
return number
}
let output = input.map(i => {
return {
prefix: fixPrefix(i.prefix),
number: fixNumber(i.number),
}
})
console.info('Input')
console.log(input)
console.info('Output')
console.log(output)
Код PHP выглядит следующим образом (смотрите его в действии на 3v4l.org здесь: https://3v4l.org/uRM6S)
<?php
$input = [
[
"prefix" => "+49-6151",
"number" => "8844-057",
],
[
"prefix" => "0049-6151",
"number" => "8844-057",
],
[
"prefix" => "++49 06151",
"number" => "8844-057",
],
];
function fixPrefix($prefix) {
$prefix = preg_replace("/^(\+{1,2}|00)\d+/", '', $prefix);
$prefix = preg_split("/\D/", $prefix);
$prefix = array_filter($prefix, function($i) {return !!$i;});
$prefix = implode($prefix);
$prefix = preg_replace("/^(?!0)/", "0", $prefix);
return $prefix;
}
function fixNumber($number) {
$number = preg_split("/\D/", $number);
$number = array_filter($number, function($i) {return !!$i;});
$number = implode($number, " ");
return $number;
}
$output = array_map(
function($i) {
return [
"prefix" => fixPrefix($i["prefix"]),
"number" => fixNumber($i["number"]),
];
}, $input);
print_r("Input\n");
print_r($input);
print_r("Output\n");
print_r($output);