Подсчитайте частоту появления слов из одного массива в другом массиве в PHP - PullRequest
0 голосов
/ 10 июля 2020

Предположим, что у меня есть два следующих массива:

$array1 = ['Apple','Juice']
$array2 = ['Apple Juice', 'Apple', 'Red Apple', 'Juice', 'Pineapple']

Мне нужен эффективный способ использования PHP встроенных функций для подсчета количества раз, когда слова из $ array1 появляются в каждом элементе из $ array2 и вывести что-то вроде этого

$output = array(
'Apple Juice' => 2,
'Apple' => 1
'Red Apple' => 1,
'Juice' => 1,
'Pineapple' => 0
);

Я знаю, что могу использовать для циклов, но очень ценится более умный способ, использующий встроенные функции PHP, которые потребляют меньше памяти и работают быстрее. Я знаю, что Python имеет встроенные функции для векторных вычислений и манипуляций, но мне не известны такие инструменты в PHP. Отсюда вопрос.

Изменить: в случае «Яблочный сок Apple», давайте посчитаем этот случай как 3 для простоты.

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

Это была бы моя попытка, но, опять же, вам придется провести некоторые тесты производительности для подобных вещей, если вы хотите знать, что действительно работает лучше всего. *, результат:

array(6) {
  ["Apple Juice"]=>
  int(2)
  ["Apple"]=>
  int(1)
  ["Red Apple"]=>
  int(1)
  ["Juice"]=>
  int(1)
  ["Pineapple"]=>
  int(0)
  ["Apple Juice Apple"]=>
  int(3)
}
1 голос
/ 10 июля 2020
$array1 = ['Apple','Juice'];
$array2 = ['Apple Juice', 'Apple', 'Red Apple', 'Juice', 'Pineapple']; 

//create output array
$output = [];

foreach($array2 as $v) {
    
    //create key in `$output` equal to `$v`, with a value of 0
    $output[$v] = 0;

    //split value of `$v` into an array of words
    $values = explode(" ", $v);

    //loop through split values of `$v`
    foreach($values as $value) {

        //check if value from split values is in `$array1`
        if(in_array($value, $array1)) {

            //increment `$output` array for key equal to `$v`
            $output[$v] += 1;
        }
    }
}

Вывод:

Array
(
    [Apple Juice] => 2
    [Apple] => 1
    [Red Apple] => 1
    [Juice] => 1
    [Pineapple] => 0
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...