PHP实现两个数组筛选:含字母u的元素归入第一个数组其余放第二个
原有思路问题分析
- 第一种对应位置交换思路:代码存在多处逻辑错误,一是
substr第一个参数传入了数组而非当前遍历的字符串元素;二是for循环条件写为$i < $tableau1[$position],实际应该是小于当前元素的字符串长度;三是仅判断了$tab1的元素,没有处理$tab2本身的元素是否含u,且仅在两个数组长度完全一致时才能运行,适用性极差。 - 第二种遍历移动思路:同样存在
substr传参错误的问题,且仅将$tab1不符合要求的元素推入$tab2,没有删除$tab1中对应元素,也没有处理$tab2原有元素中含u的情况,逻辑不完整。
正确实现代码
直接合并两个数组的所有元素统一分类,逻辑最简单不易出错,完整可运行代码如下:
<?php $tab1 = ["echelle", "trio", "pamplemousse", "legumes"]; $tab2 = ["lama", "geranium", "pendule", "elephant"]; // 合并两个数组所有元素 $allItems = array_merge($tab1, $tab2); $newTab1 = []; $newTab2 = []; foreach ($allItems as $word) { // 判断是否包含字母u,需不区分大小写的话可以先转成小写再判断 if (str_contains($word, 'u')) { $newTab1[] = $word; } else { $newTab2[] = $word; } } // 覆盖原数组 $tab1 = $newTab1; $tab2 = $newTab2; // 验证输出 var_dump($tab1); var_dump($tab2); ?>
如果使用的是PHP8以下版本,将判断含u的代码替换为兼容写法即可:
if (strpos($word, 'u') !== false) {
运行后$tab1仅保留所有含u的单词:pamplemousse、legumes、geranium、pendule,其余不含u的单词全部归入$tab2,符合需求。
内容的提问来源于stack exchange,提问作者SamiKode
相关产品推荐
相关产品推荐

