我有一個關於確定一個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 - 瀏覽子集。如果超集中的所有內容都很好,否則它不是子集。記得維恩圖? –