You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何优雅从URL数组生成两个子数组并删除原数字键

需求背景

我有一个包含数千条URL的数组,示例如下:

$urls = array (
  0 => 'https://domain.tld/ARENA/000024171/NAV/000024171_front.jpg',
  1 => 'https://domain.tld/ARENA/000436478/ΚΟΡ/000436478_front.jpg',
  2 => 'https://domain.tld/ARENA/000436478/ΚΟΡ/000436478_1.jpg',
  3 => 'https://domain.tld/ARENA/000436478/ΚΟΡ/000436478_front.jpg',
  4 => 'https://domain.tld/ARENA/000436478/ΚΟΡ/000436478_1.jpg',
  5 => 'https://domain.tld/ARENA/000468507/ΜΑΥ/000468507_front.jpg',
  6 => 'https://domain.tld/ARENA/000468507/ΜΑΥ/000468507_1.jpg',
  7 => 'https://domain.tld/ARENA/000468507/ΜΑΥ/000468507_2.jpg',
  8 => 'https://domain.tld/ARENA/000468507/ΜΑΥ/000468507_front.jpg',
  9 => 'https://domain.tld/ARENA/000468507/ΜΑΥ/000468507_1.jpg',
  10 => 'https://domain.tld/ARENA/000468507/ΜΑΥ/000468507_2.jpg',
  11 => 'https://domain.tld/ARENA/000523508/ΠΟΛΥ/000523508_front.jpg',
  12 => 'https://domain.tld/ARENA/000523508/ΠΟΛΥ/000523508_1.jpg',
  13 => 'https://domain.tld/ARENA/000548703/NAV/000548703_front.jpg',
  14 => 'https://domain.tld/ARENA/000548703/NAV/000548703_1.jpg',
  15 => 'https://domain.tld/ARENA/000548703/NAV/000548703_front.jpg',
);

需要对URL中间的3-4个希腊字母(如ΡΟΖ、ΠΟΛΥ等)进行转写,已定义转写对应关系:

$greek = array('Α', 'Β', 'Γ', 'Δ', 'Ε', 'Ζ', 'Η', 'Θ', 'Ι', 'Κ', 'Λ', 'Μ', 'Ν', 'Ξ', 'Ο', 'Π', 'Ρ', 'Σ', 'Τ', 'Υ', 'Φ', 'Χ', 'Ψ', 'Ω', ' ');
$latin = array('A', 'B', 'G', 'D', 'E', 'Z', 'H', 'TH', 'I', 'K', 'L', 'M', 'N', 'KS', 'O', 'P', 'R', 'S', 'T', 'Y', 'F', 'X', 'PS', 'O', '_');

需要生成两个子数组,保持转写后的URL和原始去重URL的顺序对应,同时清除原始数组中重复的数字键内容,仅保留GREEK(原始去重URL)和LATIN(转写后URL)两个子数组,要求代码简洁优雅。


解决方案

方案1:一行代码实现(兼容所有PHP版本)

利用PHP赋值表达式会返回赋值结果的特性,在数组声明时同步定义临时变量存储去重后的结果,直接用于转写逻辑:

$urls = ['GREEK' => $unique = array_values(array_unique($urls)), 'LATIN' => str_replace($greek, $latin, $unique)];

该写法直接覆盖原$urls变量,自动清除原有数字键的冗余数据,无需额外的unset或循环操作。临时变量$unique仅作为中间传递值,对后续代码无侵入性。

方案2:无临时变量污染实现(PHP 7.4+ 支持)

如果不希望引入额外的临时变量污染作用域,可以用箭头函数立即执行的方式实现:

$urls = (fn($unique) => ['GREEK' => $unique, 'LATIN' => str_replace($greek, $latin, $unique)])(array_values(array_unique($urls)));

该方案通过立即执行函数将去重结果作为参数传入,执行完成后不会留下任何全局临时变量,完全无副作用。


内容的提问来源于stack exchange,提问作者Faye D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:45:06