如何在implode结合array_filter、array_map时提取纯数字并转整数
解决方案
你的问题出在对整个子数组拼接结果做强制类型转换,比如子数组['329ds','300']拼接成'329ds,300'后转int,只会提取开头的329,直接丢失了300元素。正确的做法是逐个处理每个子元素,再收集所有有效数字。
方法一:提取所有含数字开头的元素的数值(保留'329ds'中的329)
$arr = [ '39' => ['307'], '42' => ['329ds', '300'] ]; // 合并嵌套数组为一维数组,再逐个转换为整数 $result = implode(',', array_map(function($item) { return (int)$item; }, array_merge(...$arr))); echo $result; // 输出:307,329,300
array_merge(...$arr):将嵌套的子数组展开为一维数组,得到['307', '329ds', '300']array_map遍历每个元素,PHP的(int)转换会自动提取字符串开头的连续数字部分- 最后用
implode拼接成目标字符串
方法二:仅保留完全由数字组成的元素(过滤'329ds'这类非纯数字元素)
如果你需要严格只保留纯数字字符串,可使用ctype_digit判断:
$arr = [ '39' => ['307'], '42' => ['329ds', '300'] ]; $result = implode(',', array_filter(array_map(function($item) { // 仅当元素是纯数字字符串时保留,否则返回false被array_filter过滤 return ctype_digit($item) ? $item : false; }, array_merge(...$arr)))); echo $result; // 输出:307,300
内容的提问来源于stack exchange,提问作者bobi
相关产品推荐
相关产品推荐

