我有主阵列:
$main = array(
'city' => 'London',
'street' => 'Hyde Park',
'name' => 'John'
);
例子:
$example1 = array(
'city',
'name'
);
$example2 = array(
'city',
'street',
'name'
);
我想收到(通过单一数组):
$example1 = array(
'London',
'John'
);
$example2 = array(
'London',
'Hyde Park',
'John'
);
更好的方法是:
function newArray($mainArray, $array) {
$new_array = [];
foreach ($mainArray as $key => $main) {
if (in_array($main, $array)) {
$new_array = $key;
}
}
return $new_array;
}
也许我可以使用array_map或array_walk,但是怎么样?
答案 0 :(得分:0)
如你所知,array_map
对此有好处。
$example1Mapped = array_map(function($key) use ($main) {
return array_key_exists($key, $main) ? $main[$key] : $key;
}, $example1);
$example2Mapped = array_map(function($key) use ($main) {
return array_key_exists($key, $main) ? $main[$key] : $key;
}, $example2);
另一种方法可能是使用array_flip
和array_intersect_key
$example1Mapped = array_intersect_key($main, array_flip($example1));
array_flip
会将数组的值转换为键,将其键转换为值。因此$example1 = ['city', 'name'];
将变为$example1 = ['city' => 0, 'name' => 1];
array_intersect_key
然后会移除$main
中的所有值,这些值在翻转的$example1
中不存在。
然而,此解决方案不会保持值的顺序,而是强制执行$main
数组的顺序。
如果示例数组中存在值,而$main
数组中的值不存在,则值将保留在array_map
方法中,而在第二种方法中将删除它们。