Intereting Posts
PHP не создает переменную $ _SESSION в session_start (); Как сделать POST массив с кодировкой multipart / form-data? Поле, отображаемое в доктрине, не работает RSS-канал PHP / MySQL PHPExcel удаляет стиль диаграммы при загрузке шаблона Linux / php требует родительский каталог API календаря Google v3 – не создание события (аутентификация от сервера к серверу) javascript: возможно ли настроить таргетинг на div другого файла? Подключение к локальной базе данных с удаленного веб-сервера Может ли php прослушивать изменение или обновление базы данных mysql? … мышление в реальном времени, живой поиск здесь Ошибка при использовании веб-службы:: SoapClient (): операция SSL завершилась неудачей с кодом 1 Создайте временный файл и автоматически удалите laravel 4 -> получить имена столбцов Подзапрос MySQL внутри поля ORDER BY. (без внутренней регистрации) как я могу создать функцию возврата успеха?

Проверьте, является ли один массив подмножеством другого

Как я могу определить, является ли один массив подмножеством другого (все элементы в первом входят во второй)?

$s1 = "string1>string2>string3>string4>string5>string6>"; $arr1 = explode(">", $s1); $s2 = "string1>string4>string5"; $arr2 = explode(">", $s2); $isSubset = /* ??? */ 

    Если вы начинаете с строк, вы можете проверить strstr($fullString,$subsetStr); , Но это будет работать только тогда, когда все символы имеют одинаковый порядок: 'abcd','cd' будет работать, но 'abcd','ad' не будет.

    Но вместо того, чтобы писать свою собственную, настраиваемую функцию, вы должны знать, что PHP имеет TONS из функций массива, поэтому его ряды невозможно, что нет функции std, которая может делать то, что вам нужно. В этом случае я бы предложил array_diff :

     $srcString = explode('>','string1>string2>string3>string4>string5'); $subset = explode('>','string3>string2>string5'); $isSubset = array_diff($subset,$srcString); //if (empty($isSubset)) --> cf comments: somewhat safer branch: if (!$isSubset) { echo 'Subset'; return true; } else { echo 'Nope, substrings: '.implode(', ',$isSubset).' Didn\'t match'; return false; } 
     if (array_intersect($array1, $array2) == $array1) { // $array1 is a subset of $array2 } 

    Просто: используйте вычитание массива.

    При вычитании массива вы узнаете, является ли один массив подмножеством другого.

    Пример:

     if (!array_diff($array1, $array2)) { // $array1 is a subset of $array2 } 

    Ссылка: array_diff

    Вы также можете использовать array_intersect .

    Я бы создал связанный массив большего массива, а затем итерацию через меньший массив, ища не столкновение, если вы его найдете, верните false.

     function isSubset($arr1,$arr2){ $map = Array(); for ($i=0;$i<count($arr1);$i++){ $map[$arr[$i]]=true; } for ($i=0;$i<count($arr2);$i++){ if (!isset($map[$arr2[$i]])){ return false; } } return true; 
     $s1 = "1>2>3>4>5>6>7"; $arr1 = explode(">",$s1); $s2 = "1>2>3"; $arr2 = explode(">",$s2); if(isSub($arr1,$arr2)){ echo 'true'; }else{ echo 'false'; } function isSub($a1,$a2){ $num2 = count($a2); $sub = $num2; for($i = 0;$i < $num2 ;$i++){ if(in_array($a2[$i],$a1)){ $sub--; } } return ($sub==0)? true:false; } , $s1 = "1>2>3>4>5>6>7"; $arr1 = explode(">",$s1); $s2 = "1>2>3"; $arr2 = explode(">",$s2); if(isSub($arr1,$arr2)){ echo 'true'; }else{ echo 'false'; } function isSub($a1,$a2){ $num2 = count($a2); $sub = $num2; for($i = 0;$i < $num2 ;$i++){ if(in_array($a2[$i],$a1)){ $sub--; } } return ($sub==0)? true:false; } 

    Простая функция, которая вернет true, если массив является точным подмножеством, в противном случае ложным. Решение применимо и для двухмерного массива.

      function is_array_subset($superArr, $subArr) { foreach ($subArr as $key => $value) { //check if keys not set in super array OR values are unequal in both array. if (!isset($superArr[$key]) || $superArr[$key] != $value) { return false; } } return true; }