PHP数组筛选:如何仅保留以字符串为键的元素?
筛选PHP数组中字符串键对应的元素并输出值
这问题挺常见的,刚好我处理过类似的需求,给你两种靠谱的实现方式,都能达到你要的效果:
方法一:用array_filter(简洁函数式风格)
这种方式利用PHP内置的array_filter函数,通过指定过滤逻辑针对数组键来筛选元素,代码更简洁:
// 定义你的原数组 $originalArray = [ 'test' => 3, 0 => 2, 'test2' => 4, 1 => 2, 'test3' => 5, 2 => 2 ]; // 过滤出键为字符串的元素 $stringKeyItems = array_filter($originalArray, function($key) { return is_string($key); }, ARRAY_FILTER_USE_KEY); // 提取值并拼成逗号分隔的字符串 $result = implode(', ', array_values($stringKeyItems)); echo $result; // 输出:3, 4, 5
代码解释:
ARRAY_FILTER_USE_KEY是array_filter的第三个参数,作用是让回调函数接收数组的键而非值作为参数;is_string($key)判断当前键是否为字符串,返回true的元素会被保留;array_values提取过滤后数组的所有值,再用implode把值拼接成你要的逗号分隔格式。
方法二:用foreach循环(直观易理解)
如果你更喜欢直观的循环逻辑,或者刚接触PHP,这种方式更容易看懂:
// 定义原数组 $originalArray = [ 'test' => 3, 0 => 2, 'test2' => 4, 1 => 2, 'test3' => 5, 2 => 2 ]; $filteredValues = []; // 遍历数组,逐个判断键的类型 foreach ($originalArray as $key => $value) { if (is_string($key)) { $filteredValues[] = $value; } } // 输出结果 echo implode(', ', $filteredValues); // 输出:3, 4, 5
代码解释:
- 初始化一个空数组
$filteredValues用来存符合条件的值; - 遍历原数组,对每个键做
is_string判断,符合条件的就把对应值加入结果数组; - 最后用
implode拼接成逗号分隔的字符串输出。
两种方法都能完美实现你的需求,选哪种看你个人习惯~
内容的提问来源于stack exchange,提问作者user6683711
相关产品推荐
相关产品推荐

