2つの配列があり、どちらも次のようになります。
Array
(
[0] => Array
(
[name] => STRING
[value] => STRING
)
[1] => Array
(
[name] => STRING
[value] => STRING
)
[2] => Array
(
[name] => STRING
[value] => STRING
)
)
2つのマスター配列内のサブ配列のIDを比較して、array_intersectを複製できるようにしたいと思います。これまでのところ、私は私の試みで成功していません。 :(
次のように、カスタム比較関数を使用するには、 array_uintersect()
を使用します。
$arr1 = array(
array('name' => 'asdfjkl;', 'value' => 'foo'),
array('name' => 'qwerty', 'value' => 'bar'),
array('name' => 'uiop', 'value' => 'baz'),
);
$arr2 = array(
array('name' => 'zxcv', 'value' => 'stuff'),
array('name' => 'asdfjkl;', 'value' => 'foo'),
array('name' => '12345', 'value' => 'junk'),
array('name' => 'uiop', 'value' => 'baz'),
);
$intersect = array_uintersect($arr1, $arr2, 'compareDeepValue');
print_r($intersect);
function compareDeepValue($val1, $val2)
{
return strcmp($val1['value'], $val2['value']);
}
あなたが望むように、
Array
(
[0] => Array
(
[name] => asdfjkl;
[value] => foo
)
[2] => Array
(
[name] => uiop
[value] => baz
)
)
function compareDeepValue($val1, $val2)
{
return strcmp($val1['value'], $val2['value']);
}
関数が配列を最初に配列するため、val2キーがval1配列に存在することを確認してください。非常に奇妙な。
組み込み関数をarray_uintersect php関数で使用できます。例:
$intersectNames = array_uintersect($arr1, $arr2, function ($val1, $val2){
return strcmp($val1['name'], $val2['name']);
});
$intersectValues = array_uintersect($arr1, $arr2, function ($val1, $val2){
return strcmp($val1['value'], $val2['value']);
});
print_r('namesIntersected' => $intersectNames, 'valuesIntersected' => $intersectValues)