У меня возник вопрос о том, является ли ассоциативный массив PHP, содержащий индексы для другого массива, подмножеством другого аналогично сконструированного ассоциативного массива, а именно: индексов к другому массиву.Как определить, является ли ассоциативный массив подмножеством другого ассоциативного массива
Если предположить, что у меня есть два массива, один с именем собак и еще называли ножками-животными.
<?php
$dogs = array(0 => array('height' => 100, 'weight' => 100),
1 => array('height' => 50, 'weight' => 50));
$legged-animals = array(0 => array('height' => 200, 'weight' => 500),
1 => array('height' => 220, 'weight' => 500),
2 => array('height' => 100, 'weight' => 100),
3 => array('height' => 50, 'weight' => 50));
?>
Таким образом, вопрос, как я могу определить, что собак является подмножеством ножек-животных?
EDIT: Вот моя попытка выяснить, является ли один является подмножеством другого:
function filter($largeSets, $subSets)
{
$result = array();
$count = count($subSets);
foreach ($largeSets as $individualSet)
{
foreach ($subSets as $set)
{
$intersection = array_intersect($individualSet, $set);
if (!empty($intersection) && isset($intersection['height']) && isset($intersection['weight']))
{
$result['array'][] = $individualSet;
$count--;
break;
}
}
}
$result['result'] = ($count == 0);
return $result;
}
ОБНОВЛЕНО: Это несколько проще решение, которое я думаю, что будет решить эту проблему. Идея состоит в том, чтобы пройти через многомерный массив, serialize
массивов, а затем использовать array_intersect
.
$dogs = array(0 => array('height' => 100, 'weight' => 100),
1 => array('height' => 50, 'weight' => 50),
2 => array('height' => 10, 'weight' => 25));
$legged_animals = array(0 => array('height' => 200, 'weight' => 500),
1 => array('height' => 220, 'weight' => 500),
2 => array('height' => 100, 'weight' => 100),
3 => array('height' => 50, 'weight' => 50));
foreach ($dogs as $dog)
{
$arr[] = serialize($dog);
}
foreach ($legged_animals as $animal)
{
$arr2[] = serialize($animal);
}
$intersection = array_intersect($arr, $arr2);
print_r($intersection);
В этот момент intersection
бы распечатать сериализованную форму пересечения. Чтобы получить исходные результаты, вам нужно будет unserialize
массивов.
Есть ли более простой способ сделать это?
array_intersect() + счетчик()? –
Можете ли вы объяснить немного больше? Благодаря! –
@ ZhiaChong - Пройдите через подмножество. Если все в надмножестве все хорошо, иначе это не подмножество. Помните диаграммы Венна? –