Как найти, если некоторые слова в значении массива находятся в одном массиве php - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть этот массив

Array
(
    [0] => Array
        (
            [time] => 18:25:00
            [artist] => LUIS RODRIGUEZ
        )

    [1] => Array
        (
            [time] => 18:34:00
            [artist] => THE BLACK EYED PEAS FT J BALVIN
        )

    [2] => Array
        (
            [time] => 18:37:00
            [artist] => THE BLACK EYED PEAS FT J BALVIN
        )

    [3] => Array
        (
            [time] => 18:44:00
            [artist] => J BALVIN
        )
    [4] => Array
        (
            [time] => 18:44:00
            [artist] => LUIS RODRIGUEZ & DEN HARROW
        )

)

Я хочу проверить, содержится ли какое-либо слово в других значениях массива, поэтому

J BALVIN is in 1,2,3
LUIS RODRIGUEZ in in 0 and 4

Так как я могу найти, если значение artist is похож на других? Я хочу, чтобы результат мог сказать мне, где есть похожие слова, и получить время. Я пытаюсь с array_intersect, но он не работает

с al oop Я могу найти значение

$input = array(array('time' => '18:44:00', 'artist' => 'LUIS RODRIGUEZ & DEN HARROW'), array('time' => '18:45:00', 'artist' => 'J BALVIN'), array('time' => '18:34:00', 'artist' => 'THE BLACK EYED PEAS FT J BALVIN'), array('time' => '18:37:00', 'artist' => 'THE BLACK EYED PEAS FT J BALVIN'), array('time' => '18:44:00', 'artist' => 'J BALVIN'));

foreach ($input as $inputs) {
    $time = $inputs['time'];
    $artist = $inputs['artist'];
}

, но как я могу сравнить строку? Если я использую in_array, результат не тот, который я хочу

foreach ($input as $inputs) {
    $time = $inputs['time'];
    $artist = $inputs['artist'];

    if (in_array($artist, $inputs)) {
        echo $artist . '<br>';
    }
}

Я должен изменить весь свой метод, но предложение @Barmar поможет мне улучшить мои новые функции, поэтому вы можете проверить здесь

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

$inputs - это не массив строк, это двумерный массив, поэтому вы не можете использовать in_array() для его поиска.

Вы можете использовать array_column() для создания массива все художники, и искать это.

Вы не можете использовать in_array() для поиска, так как он точно соответствует. L oop поверх него и вызовите strstr(), чтобы проверить, является ли текущий исполнитель подстрокой.

$artists = array_column($input, 'artist');
foreach ($input as $inputs) {
    $time = $inputs['time'];
    $artist = $inputs['artist'];

    foreach ($artists as $index => $a) {
        if (strstr($a, $artist)) {
            echo "$artist is in $index";
            break;
        }
    }
}
0 голосов
/ 07 апреля 2020

Можете попробовать

function findIndexesByArtist($array, $name) {
    return array_keys(array_filter($array, function($item) {
       return (strpos($item['artist'], $name) !== false);
    }));
}
...