Проверьте, присутствует ли значение массива 1 в ключе массива 2 - PHP - PullRequest
0 голосов
/ 01 марта 2020

У меня есть два массива:

$arr1 = Array
(
    [0] => Apple
    [1] => Ball
    [2] => whale
    [3] => Dog
    [4] => cat
)

и

$arr2 = Illuminate\Support\Collection Object
(
    [items:protected] => Array
        (
            [Red apple] => 27
            [tball] => 28
            [cat] => 29
            [Dog] => 30
            [blue ball] => 31
        )
    ]
)

Здесь я хочу проверить, соответствует ли значение 1-го массива ('% like %') любому ключу второго массива. Я хотел бы объяснить это в отношении этого примера.

Здесь вы можете увидеть 1-е значение $arr1, равное Apple, теперь вы можете увидеть Red apple на arr2. Это означает, что это должно рассматриваться как совпадение. Однако Ball не должен совпадать с tball вместо Ball должно совпадать с blue ball.

Если он найдет совпадение, то я хочу, чтобы значение было сохранено в массиве $result, если нет совпадающего значения, конкретный индекс массива $result должен быть пустым. В этом случае я хочу точный результат как:

$result= Array
(
    [0] => 27
    [1] => 31
    [2] => 
    [3] => 30
    [4] => 29
)

песочница php

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Глядя на вашу ссылку, реальные массивы выглядят намного больше, и я предполагаю, что возможно двустороннее сопоставление.
Из-за этого я немного изменил вывод кода для группировки по категории.
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

1 голос
/ 01 марта 2020

привет, просто попробуйте обычный опыт и попробуйте это

   $arr1 = Array('Apple', 'Ball', 'whale', 'Dog', 'cat');
    $arr2=Array('Red apple' => 27, 'tball' => 28, 'cat' => 29, 'Dog' => 30, 'blue ball' => 31);
    $array=array();
    foreach ($arr1 as $arr) {
        $flag=false;
        foreach ($arr2 as $a=>$ar) {
            $search = '\b( ?'.$arr.')';
            if(preg_match("/{$search}/i", $a)) {
                array_push($array,$ar);
                $flag=true;
            }
        }
        if (!$flag) {
            array_push($array,'');
        }
    }
    var_dump($array); die;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...