第一次海报,长期访客。
我已尝试在SO上找到可以帮助我的东西,但到目前为止,我一直没有成功。如果有人知道这个问题的重复我提前道歉,我无法找到它。
无论如何,我想知道我的问题是否有最佳实践或最佳解决方案。并不是说我不能编写一个正常运行的代码,我只是希望不要一次重写轮子,希望有一个优雅的解决方案。
考虑以下数组:
Array
(
[0] => Array
(
[filename] => 'test1.jpg'
[comment] => 'This is a test'
[status] => 2
[author] => 'John Smith'
[uniquekey1] => 3
)
[1] => Array
(
[filename] => 'test2.jpg'
[comment] => 'This is a test'
[status] => 2
[author] => 'Unknown'
[uniquekey2] => 3
)
[2] => Array
(
[filename] => 'test3.jpg'
[comment] => 'This is a test'
[status] => 2
[author] => 'Unknown'
[uniquekey3] => 3
)
)
在处理完之后,我希望返回的数组包含上面数组数组中的键,但只包含所有子数组中相同键的键和值。实际上,上面会生成一个如下所示的数组:
Array
(
[comment] => 'This is a test'
[status] => 2
)
清楚可见,只返回所有三个(在本例中)数组项中相同的键:值对。
一个很好的使用示例是在iTunes中编辑多个项目,其中相等的值显示在编辑字段中,其余项目显示幻影的“多个值”文本。我的目标是类似的东西。
感谢您提供的所有帮助和指示。
编辑:此处也添加了解决方案。由于接受的解决方案错过了'uniqueKey不相同,并且array_intersect()在值匹配时返回了这些,这是不需要的行为,因此有一点混乱。解决方案是使用array_intersect_assoc()而不是它。
$a = array(
array(
'filename' => 'test1.jpg',
'comment' => 'This is a test',
'status' => 2,
'author' => 'John Smith',
'uniquekey1' => 3
),
array(
'filename' => 'test2.jpg',
'comment' => 'This is a test',
'status' => 2,
'author' => 'Unknown',
'uniquekey2' => 3
),
array(
'filename' => 'test3.jpg',
'comment' => 'This is a test',
'status' => 2,
'author' => 'Unknown',
'uniquekey3' => 3
),
);
$b = call_user_func_array('array_intersect_assoc',$a);
...它会返回“评论”和“状态”字段,而不是其他任何内容。
答案 0 :(得分:0)
Array_intersect to rescue:
$array = array();
$array[] = array('filename' => 'test1.jpg', 'comment' => 'This is a test', 'uniqueKey' => 3);
$array[] = array('filename' => 'test2.jpg', 'comment' => 'This is a test', 'uniqueKey' => 3);
$array[] = array('filename' => 'test3.jpg', 'comment' => 'This is a test', 'uniqueKey' => 3);
$intersection = call_user_func_array('array_intersect', $array);
然后$ intersection:
Array
(
[comment] => This is a test
[uniqueKey] => 3
)