如何解决PHP:使用 strpos 和 str_replace 组合数组
我有 2 个数组,看起来像这样:
$alertTypes = ['outbid','subAllVendorComments'];
$channels = ['outbiduseSms','outbiduseBrowser','subAllVendorCommentsuseEmail','subAllVendorCommentsuseWhatsApp'];
我的目标是将它们组合成一个结构如下的数组:
Array
(
[outbid] => Array
(
[0] => useSms,[1] => useBrowser
)
[subAllVendorComments] => Array
(
[0] => useEmail,[1] => useWhatsApp
)
)
每个子数组中的元素是 $channels 数组中以 $alertTypes 数组中的单词开头的单词。
我尝试了以下方法,但它不起作用,因为它依赖于 $channels 数组中只有一个元素以 $alertTypes 数组中的相同单词开头:
$result = [];
for($i = 0; $i < count($alertTypes); $i++) {
if(strpos($channels[$i],$alertTypes[$i]) !== false) {
$result[$alertTypes[$i]] = [str_replace($alertTypes[$i],'',$channels[$i])];
}
}
感谢任何帮助。
解决方法
您对两个数组使用相同的索引 $i
,这仅在 $alertTypes
中的字符串位于 $channels
的相应元素中时才有效。您需要将警报类型与所有通道进行比较,这可以使用嵌套循环来完成。
您还替换了 $result
的元素,而不是推送到嵌套数组上。
如果您使用 foreach
而不是 for
,代码也会更容易。
foreach ($alertTypes as $alert) {
$array = [];
foreach ($channels as $channel) {
if (strpos($channel,$alert) !== false) {
$array[] = str_replace($alert,'',$channel);
}
}
$result[$alert] = $array;
}
,
获得相同结果的另一种方法:
首先,我使用来自 alertTypes 值的键和空数组作为值设置 arrayResult。然后我“走”数组通道,对于每个通道我检查 arrayResult 键,当我发现一个 arrayResult 键是一个通道值的请求时,我将它设置为 arrayResult 中该键的值。
<?php
$arrayResult = array_combine($alertTypes,array_fill(0,count($alertTypes),array()));
array_walk($channels,function($channel) use (&$arrayResult) {
foreach($arrayResult as $key => $array) {
if(strpos($channel,$key) === 0) {
$arrayResult[$key][] = str_replace($key,$channel);
}
}
});
?>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。