У меня есть два массива, которые выглядят так:
Array ( [0] => Array ( [name] => STRING [value] => STRING ) [1] => Array ( [name] => STRING [value] => STRING ) [2] => Array ( [name] => STRING [value] => STRING ) )
и я хотел бы иметь возможность реплицировать 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, потому что функция сначала упорядочивает массив. Очень странно.