Глядя на вашу ссылку, реальные массивы выглядят намного больше, и я предполагаю, что возможно двустороннее сопоставление.
Из-за этого я немного изменил вывод кода для группировки по категории.
I ' я не уверен, что делать, если существует совпадение двух, какое число следует извлечь?
Я также использую preg_grep, который использует регулярные выражения для массивов вместо циклического массива.
И preg_quote, чтобы убедиться, что символы регулярных выражений не вмешиваться в регулярное выражение.
$arr1 = Array('Apple', 'Ball', 'whale', 'Dog', 'cat');
$arr2 = Array('Red apple' => 27, 'tball' => 28, 'cat' => 29, 'Dog' => 30, 'blue ball' => 31, 'dog food' => 25, 'green apple' => 111);
$keys = array_keys($arr2);
foreach($arr1 as $find){
$matches = preg_grep("/\b" . preg_quote($find) . "/i", $keys);
foreach($matches as $key => $word){
$result[$find][] = $arr2[$word];
}
}
var_dump($result);
Вывод этого:
array(4) {
["Apple"]=>
array(2) {
[0]=>
int(27)
[1]=>
int(111)
}
["Ball"]=>
array(1) {
[0]=>
int(31)
}
["Dog"]=>
array(2) {
[0]=>
int(30)
[1]=>
int(25)
}
["cat"]=>
array(1) {
[0]=>
int(29)
}
}
https://3v4l.org/es2Gt