我有一个关于确定一个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));
?>
所以现在的问题是,我怎么能确定狗是腿,动物的一个子集?
编辑: 这是我在找出一个是另一个的子集的尝试:
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 - 浏览子集。如果超集中的所有内容都很好,否则它不是子集。记得维恩图? –