Здравствуйте.
Как правильно написать алгоритм который преобразует массив одного вида в другой, только сгруппированный: грубо говоря, есть массив вытащенный из базы и отсортированный по названию такого вида https://pastebin.com/i1tbcGpe , моя цель вынести в отдельные массивы схожие между собой значения, т.е. из этого:
...
['title' => 'Aton 4 Black Sea'],
['title' => 'Aton 4 Coffee Bean'],
['title' => 'Aton 4 Grape Juice'],
['title' => 'Aton 4 True Blue'],
['title' => 'Aton Basic Blue Moon'],
['title' => 'Aton Basic Cobblestone'],
['title' => 'Aton Basic Pure Black'],
['title' => 'Aton Basic Purple Rain'],
['title' => 'Aton Basic Rumba Red'],
...
пытаюсь получить следующие:
[0] => [
['title' => 'Aton 4 Black Sea'],
['title' => 'Aton 4 Coffee Bean'],
['title' => 'Aton 4 Grape Juice'],
['title' => 'Aton 4 True Blue'],
],
[1] => [
['title' => 'Aton Basic Blue Moon'],
['title' => 'Aton Basic Cobblestone'],
['title' => 'Aton Basic Pure Black'],
['title' => 'Aton Basic Purple Rain'],
['title' => 'Aton Basic Rumba Red'],
];
Последние 2 дня провозился с вычислением сходства строк между собой посредством функций similar_text и levenshtein это помогло в некоторых случаях, процентов на 65%, но это совсем не решение, по этому решил пойти простым решением и с вашей помощью просто разгруппировать этот массив.
Буду очень признателен за правильную наводку.
Так же открыт к любым другим методам достижения цели.
Спасибо за внимание.
Разгруппировку по двум словам можно выполнить так:
$arr = [
['title' => 'Aton 4 Black Sea'],
['title' => 'Aton 4 Coffee Bean'],
['title' => 'Aton 4 Grape Juice'],
['title' => 'Aton 4 True Blue'],
['title' => 'Aton Basic Blue Moon'],
['title' => 'Aton Basic Cobblestone'],
['title' => 'Aton Basic Pure Black'],
['title' => 'Aton Basic Purple Rain'],
['title' => 'Aton Basic Rumba Red']
];
function print_m($text, $arr, $level=0){
$space = str_repeat(" ", $level++);
echo "$space<b>$text</b>";
$flag = false;
foreach($arr as $value) $flag = $flag || (gettype($value)=="array");
foreach($arr as $key => $value) {
if(gettype($value) != "array") {
echo $flag ? "<br>$key => $value" : " $value";
} else {
print_m("<br>$space$key => [", $value, $level);
echo " ]";
}
}
$level--;
}
$common = [];
print_m("arr:", $arr);
array_walk($arr, function($val)use(&$common){
$exval = explode(" ", end($val), 3);
$key2 = $exval[0]." ".$exval[1];
$common[$key2][] = $val;
});
print_m("<br>common:",$common);
$result = array_values($common);
print_m("<br>result = values:",$result);
var_dump($result);
Результаты работы программы:
arr: 0 => [ Aton 4 Black Sea ] 1 => [ Aton 4 Coffee Bean ] 2 => [ Aton 4 Grape Juice ] 3 => [ Aton 4 True Blue ] 4 => [ Aton Basic Blue Moon ] 5 => [ Aton Basic Cobblestone ] 6 => [ Aton Basic Pure Black ] 7 => [ Aton Basic Purple Rain ] 8 => [ Aton Basic Rumba Red ] common: Aton 4 => [ 0 => [ Aton 4 Black Sea ] 1 => [ Aton 4 Coffee Bean ] 2 => [ Aton 4 Grape Juice ] 3 => [ Aton 4 True Blue ] ] Aton Basic => [ 0 => [ Aton Basic Blue Moon ] 1 => [ Aton Basic Cobblestone ] 2 => [ Aton Basic Pure Black ] 3 => [ Aton Basic Purple Rain ] 4 => [ Aton Basic Rumba Red ] ] result = values: 0 => [ 0 => [ Aton 4 Black Sea ] 1 => [ Aton 4 Coffee Bean ] 2 => [ Aton 4 Grape Juice ] 3 => [ Aton 4 True Blue ] ] 1 => [ 0 => [ Aton Basic Blue Moon ] 1 => [ Aton Basic Cobblestone ] 2 => [ Aton Basic Pure Black ] 3 => [ Aton Basic Purple Rain ] 4 => [ Aton Basic Rumba Red ] ] C:\wamp64\www\2017\17_04_03_explode_walk\index.php:43: array (size=2) 0 => array (size=4) 0 => array (size=1) 'title' => string 'Aton 4 Black Sea' (length=16) 1 => array (size=1) 'title' => string 'Aton 4 Coffee Bean' (length=18) 2 => array (size=1) 'title' => string 'Aton 4 Grape Juice' (length=18) 3 => array (size=1) 'title' => string 'Aton 4 True Blue' (length=16) 1 => array (size=5) 0 => array (size=1) 'title' => string 'Aton Basic Blue Moon' (length=20) 1 => array (size=1) 'title' => string 'Aton Basic Cobblestone' (length=22) 2 => array (size=1) 'title' => string 'Aton Basic Pure Black' (length=21) 3 => array (size=1) 'title' => string 'Aton Basic Purple Rain' (length=22) 4 => array (size=1) 'title' => string 'Aton Basic Rumba Red' (length=20)
А дальше определяться с другими ситуациями.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый день! Вдруг появилась ошибка при попытке зайти в админку:
Пишу API для онлайн-игрыТребуется сгенерировать токен игрока из 30 знаков (только цифры и английские буквы)
Есть локальный сервер$_SERVER['REMOTE_ADDR'] почему-то дает результат "::1" вместо нормального "127