php - 如何正确处理数组?
问题描述
有两个数组:
$arr1 = ['word', 'tech', 'care', 'kek', 'lol', 'wild', 'regex'];
$arr2 = ['ord', 'ek', 'ol', 'ld', 'gex', 'ss'];
第二个数组的元素个数小于或等于第一个数组。
对第一个数组和第二个数组进行排序,如果第二个数组的元素包含在第一个数组元素的末尾,则按如下形式对数组进行排序:
Array
(
[0] => w_ord
[1] => tech
[2] => care
[3] => k_ek
[4] => l_ol
[5] => wi_ld
[6] => re_gex
)
重要提示:第二个数组的元素从不重复,并且可以按任何顺序排列。如果在第二个元素中没有第一个数组元素的结尾,则设置第一个数组元素的值。
我这样做:
foreach($arr2 as $val) {
$strrepl[$val] = "_".$val;
}
foreach($arr1 as $key => $val) {
$arr3[$key] = str_replace(array_keys($strrepl), $strrepl, $val);
}
print_r($arr3);
但我不确定这是正确的方法,你有什么建议?
解决方案
嗯,让我们看看......纯粹的功能,因为你知道:D
function ends($str) {
return function($suffix) use($str) {
return mb_strlen($str) >= mb_strlen($suffix)
&& mb_substr($str, mb_strlen($suffix) * -1) === $suffix;
};
}
$result = array_map(function($item) use($arr2) {
$filter = ends($item);
$suffixes = array_filter($arr2, $filter);
if (empty($suffixes)) {
return $item;
}
// This only cares about the very first match, but
// is easily adaptable to handle all of them
$suffix = reset($suffixes);
return mb_substr($item, 0, mb_strlen($suffix) * -1) . "_{$suffix}";
}, $arr1);
推荐阅读
- cypress - 有没有办法断言 span 元素是否为粗体?
- jquery - 使用 jQuery 调用 rest API 的正确语法
- php - 用于选择和引导导航栏的菜单树中的问题
- css - 如何从 Wordpress 获取 CSS 图像集(srcset)?
- mysql-workbench - 在mysql中将多行转换为多列
- android - Android - java 添加请稍候消息
- python - 如何输出从列表中找到最大频率值的字典?
- c++ - C++ - 类依赖 - 循环问题
- amazon-web-services - 如何将我的 AWS Elastic Search Service 设为私有?
- javascript - 如何更新事件处理函数中的类属性?