別の配列へのインデックスを含む PHP 連想配列が、同様に構築された別の連想配列、つまり別の配列へのインデックスを含む連想配列のサブセットであるかどうかを判断することについて質問があります。
2 つの配列があると仮定します。1 つはdogsという名前で、もう1 つはlegged-animalsという名前です。
<?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
、配列が必要です。
これを行う簡単な方法はありますか?