我有一个包含2200项的大型tLD数组,如下所示:
$TestArray = array(".aero", ".airport.aero", ".cargo.aero", ".charter.aero", ".aetna");我想将它们转换如下:
Array
(
[0] => Array
(
[tld] => .aero
[gTLD] => Array ( [0] => .airport.aero [1] => .cargo.aero [2] => .charter.aero )
)
[1] => Array
(
[tld] => .aetna
[gTLD] =>
)
)您可以在下面看到我的代码:
$TldList = array();
$TestArray = array(".aero", ".airport.aero", ".cargo.aero", ".charter.aero", ".aetna");
foreach ($TestArray as $tld)
{
$LocalTld = array();
$TldBreakPoints = explode(".",$tld);
$gTLD = array();
$found = false;
if((count($TldBreakPoints)) > 2)
{
foreach ($TestArray as $tld2)
{
$TldBreakPoints2 = explode(".",$tld2);
if((count($TldBreakPoints2)) > 2)
{
if($tld == '.'.$TldBreakPoints2[2])
{
echo 'match gtld';
$found = true;
$gTLD[] = $tld2;
}else{
//Nothing
}
}else{
// Nothing
}
}
}else{
}
$LocalTld['tld'] = $tld;
if($found)
{
$LocalTld['gTLD'] = $gTLD;
}else{
$LocalTld['gTLD'] = '';
}
$TldList[] = $LocalTld;
}
echo '<pre>';
print_r($TldList);请帮帮忙
谢谢
发布于 2022-06-14 17:57:46
$array = [ '.aero', '.airport.aero', '.cargo.aero', '.charter.aero', '.aetna' ];
$result = array_values(
array_reduce(
$array,
function ($carry, $item) {
if (substr_count($item, '.') === 1) {
$carry[$item] = [ 'tld' => $item, 'gTLD' => [] ];
} else {
$parts = preg_split('/^([.].+)([.].+)/', $item, -1, PREG_SPLIT_DELIM_CAPTURE + PREG_SPLIT_NO_EMPTY);
$last = end($parts);
$carry[$last]['gTLD'][] = $item;
}
return $carry;
},
[]
)
);
print_r($result);假设:
发布于 2022-06-15 03:54:48
如果gTLD总是在遇到tld之后出现,那么任务就可以大大减少。此任务只需对每个字符串进行解析,就可以确定gTLD,然后使用所需的关联元素将数据推入所需的组中。
下面的preg_match()不仅检查字符串值是否包含gTLD值,而且在它包含时隔离tld (如$m[0])。
代码:(演示)
$result = [];
foreach ($array as $value) {
if (!preg_match('/(?!^)\..+/', $value, $m)) {
$result[$value] = ['tld' => $value, 'gTLD' => []];
} else {
$result[$m[0]]['gTLD'][] = $value;
}
}
var_export(array_values($result));如果gTLDs不能保证在初始化tlds之后发生,那么就需要更多的条件检查。
代码:(演示)
$result = [];
foreach ($array as $value) {
if (!preg_match('/(?!^)\..+/', $value, $m)) {
if (!isset($result[$value])) {
$result[$value] = ['tld' => $value, 'gTLD' => []];
}
} else {
if (!isset($result[$m[0]])) {
$result[$m[0]] = ['tld' => $m[0], 'gTLD' => [$value]];
} else {
$result[$m[0]]['gTLD'][] = $value;
}
}
}
var_export(array_values($result));https://stackoverflow.com/questions/72618434
复制相似问题