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

如何在Twig中为数组元素应用自定义phone过滤器后转JSON?

解决数组电话号码先过滤再转JSON的问题

这个问题我之前踩过坑!核心原因是你用的phone过滤器是针对单个字符串电话号码设计的——它只接收单个字符串参数,你直接把整个数组丢给它,它当然会报错说“期望字符串而非数组”啦😅

要实现需求,你需要分两步走:先给数组里的每一个元素单独应用phone过滤器,得到处理后的新数组,再把这个新数组转成JSON。下面分不同模板引擎给出具体实现:

1. Twig模板引擎(Symfony、Craft CMS等常用)

Twig自带的map过滤器就是干这个的——它能遍历数组,对每个元素执行指定逻辑,完美适配你的场景:

{{ numbersArray|map(number => number|phone)|json_encode }}
  • map(number => number|phone):遍历numbersArray里的每个电话号码,对它单独应用phone过滤器,返回格式化后的新数组
  • 最后用json_encode把新数组转成标准JSON字符串

2. Laravel Blade模板引擎

Blade里可以借助Laravel的集合来处理,用map方法遍历处理每个元素,再转JSON:

{{ collect($numbersArray)->map(fn($number) => phone($number))->toJson() }}

注:如果你的phone过滤器是通过自定义辅助函数实现的,直接调用phone($number)就行;如果是模型的方法,就改成$number->phone()。

3. 后端提前处理(通用方案)

如果你的模板引擎没有类似map的便捷工具,最稳妥的方式是在后端代码里先处理好数组,再传给模板:

// 后端PHP示例代码
$processedNumbers = array_map(function ($phoneNumber) {
    // 这里调用你的自定义phone过滤逻辑
    return apply_phone_filter($phoneNumber);
}, $numbersArray);

然后在模板里直接把处理好的数组转成JSON:

{{ processedNumbers|json_encode }}

或者Blade:

{{ json_encode($processedNumbers) }}

这样处理后,每个电话号码都会先经过phone过滤器格式化,再整体转成JSON,完全不会再出现类型不匹配的错误啦~

内容的提问来源于stack exchange,提问作者Magnus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:30:01