Добрый день. У меня есть массив: Код (Text): Array ( [0] => {"item_id":"2285","item_image":2291,"item_variation":{"kolichestvo-domenov":"1 домен", "support":"Нет"},"item_price":"1900"} [1] => {"item_id":"2286","item_image":2292,"item_variation":{"kolichestvo-domenov":"3 домена", "support":"Да"},"item_price":"3800"} [2] => {"item_id":"2287","item_image":2289,"item_variation":{"kolichestvo-domenov":"5 доменов", "support":"Да"},"item_price":"5500"} ) Второй массив: Код (Text): Array ( [kolichestvo-domenov] => 3 домена [support] => Да [saveguard] => [post_id] => 2222 ) Мне условно необходимо получить элемент 1 из первого массива. Выборка производится если в item_variation первого массива есть значения из второго. Последовательность и количество элементов в обоих массивах заведомо неизвестно. Буду благодарен за любую помощь.
PHP: $array1 = Array ( Array( "item_id" => "2285","item_image" => 2291,"item_variation" => Array("kolichestvo-domenov" => "1 домен","support" => "Нет" ),"item_price" => "1900"), Array("item_id" => "2286","item_image" => 2292,"item_variation" => Array("kolichestvo-domenov" => "3 домена", "support" => "Да"),"item_price" => "3800"), Array("item_id" => "2287","item_image" => 2289,"item_variation" => Array("kolichestvo-domenov" => "5 доменов", "support" => "Да"),"item_price" => "5500") ); $array2 = Array ( "kolichestvo-domenov" => "3 домена", "support" => "Да", "saveguard" => "", "post_id" => 2222 ); $result = []; foreach($array1 as $item) { $kol = trim( $item['item_variation']['kolichestvo-domenov'] ); $sup = trim( $item['item_variation']['support'] ); if( trim( $array2['kolichestvo-domenov'] ) === $kol && trim( $array2['support'] ) === $sup ) { $result[] = $item['item_id']; } } print_r($result);
были бы это обычный json он был бы в кавычках. в данном случае это не string для js вполне себе объекты
Давай не будем друг другу голову заливать глупой информацией . Держи: http://sandbox.onlinephpfunctions.com/code/88959df0e15a013b522be822b080551a3f0c56b2 нет, ты серьезно ? в callable !
перепиши, попробуй в цикле прописать проверку , что то вроде: if ($item['item_variation'] === $array2) {
Смотри в песочнице: http://sandbox.onlinephpfunctions.com/code/59afee27615a883fbd8fadb101a997f90d53fed2 При "==" проверяется только соответствие ключей элементов массива и значения, а последовательность элементов массива не учитывается.
Сделал следующим образом, вдруг кому пригодится. Код (Text): $array1 = Array ( Array( "item_id" => "2285","item_image" => 2291,"item_variation" => Array("kolichestvo-domenov" => "1 домен","support" => "Нет" ),"item_price" => "1900"), Array("item_id" => "2286","item_image" => 2292,"item_variation" => Array("kolichestvo-domenov" => "3 домена", "support" => "Да", "saveguard" => "", "post_id" => 2222),"item_price" => "3800"), Array("item_id" => "2287","item_image" => 2289,"item_variation" => Array("kolichestvo-domenov" => "5 доменов", "support" => "Да"),"item_price" => "5500") ); $array2 = Array ( "saveguard" => "", "post_id" => 2222, "support" => "Да", "kolichestvo-domenov" => "3 домена"); foreach ($array1 as $a) { $arr = array_diff( $a['item_variation'], $array2 ); if ( empty( $arr ) ){ return $a; } } array_diff возвратит пустой массив, если данные из $a['item_variation'] будут присутствовать в массиве $array2;