我有两个像这样的数组
Array
(
[0] => 1
[1] => 3
[2] => 4
[3] => 5
)
Array
(
[0] => Array
(
[1] => Test1
[2] => Location1
[3] => Email1
[4] => Name1
[5] => Address1
[6] => Age1
[7] => Gender1
[8] => Phone1
[9] => Website1
[10] => Cell1
)
[1] => Array
(
[1] => Test2
[2] => Location2
[3] => Email2
[4] => Name2
[5] => Address2
[6] => Age2
[7] => Gender2
[8] => Phone2
[9] => Website2
[10] => Cell2
)
[2] => Array
(
[1] => Test3
[2] => Location3
[3] => Email3
[4] => Name3
[5] => Address3
[6] => Age3
[7] => Gender3
[8] => Phone3
[9] => Website3
[10] => Cell3
)
)
现在我必须从每个第二个数组中选择1,3,4和5索引值。如果没有两个循环我怎么能这样做。我知道我将不得不使用一个,但我不想使用两个循环
需要输出
Array
(
[0] => Array
(
[1] => Test1
[3] => Email1
[4] => Name1
[5] => Address1
)
[1] => Array
(
[1] => Test2
[3] => Email2
[4] => Name2
[5] => Address2
)
[2] => Array
(
[1] => Test3
[3] => Email3
[4] => Name3
[5] => Address3
)
)
答案 0 :(得分:4)
使用一个循环,array_flip
和array_intersect_key
,您可以这样做:
$array_one = array(1, 3, 4, 5);
$array_two = array(
array(1 => 'Test1', 'Location1', 'Email1', 'Name1', 'Address1', 'Age1', 'Gender1', 'Phone1', 'Website1', 'Cell1'),
array(1 => 'Test2', 'Location2', 'Email2', 'Name2', 'Address2', 'Age2', 'Gender2', 'Phone2', 'Website2', 'Cell2'),
array(1 => 'Test3', 'Location3', 'Email3', 'Name3', 'Address3', 'Age3', 'Gender3', 'Phone3', 'Website3', 'Cell3')
);
$array_one_flip = array_flip($array_one);
foreach($array_two as $k => $v) {
$result[] = array_intersect_key($v, $array_one_flip);
}
print_r($result);
结果将是:
Array
(
[0] => Array
(
[1] => Test1
[3] => Email1
[4] => Name1
[5] => Address1
)
[1] => Array
(
[1] => Test2
[3] => Email2
[4] => Name2
[5] => Address2
)
[2] => Array
(
[1] => Test3
[3] => Email3
[4] => Name3
[5] => Address3
)
)
答案 1 :(得分:2)
您可以使用array_intersect_key
:
$keys = array_flip($keys_array); // flip the keys array for matching with array_intersect_key
$result = array();
foreach ($content_array as $arr)
{
$result[] = array_intersect_key($arr, $keys);
}
Working example on codepad。感谢@Michael Irigoyen为阵列......
答案 2 :(得分:1)
只需使用array_map
这样的功能:
$keys_to_keep = array(1, 3, 4, 5);
$key_diff_array = array_fill_keys($keys_to_keep, 'not used');
$array; // your main array you want to filter assume value has been set elsewhere
$filtered_array = array_map(function ($value) use $key_diff_array {
return array_intersect_key($value, $key_diff_array);
}, $array);
答案 3 :(得分:0)
使用一个循环:
<?php
$selection = array(1, 3, 4, 5);
for($i = 0; $i < count($array); $i++){
reset($selection);
$first = current($selection);
$newarray[$i][$first] = $array[$i][$first];
$next = next($selection);
$newarray[$i][$next] = $array[$i][$next];
$next = next($selection);
$newarray[$i][$next] = $array[$i][$next];
$next = next($selection);
$newarray[$i][$next] = $array[$i][$next];
}
echo '<pre>';
print_r($newarray);
答案 4 :(得分:0)
您可能还会发现有关array_flip的说明很有用。
确保$ array1具有可在翻转时作为数组键接受的值。
http://php.net/manual/en/language.types.array.php
密钥可以是整数或字符串。值可以是任何类型。
此外还会发生以下关键演员:
包含有效整数的字符串将强制转换为整数类型。例如。键“8”实际上将存储在8下。另一方面,“08”将不会被转换,因为它不是有效的十进制整数。 浮点数也会转换为整数,这意味着小数部分将被截断。例如。密钥8.7实际上将存储在8下。 Bool也被转换为整数,即键值true实际上将存储在1下,键值为0。 Null将被强制转换为空字符串,即密钥null实际上将存储在“”下。 数组和对象不能用作键。这样做会导致警告:非法偏移类型。 如果数组声明中的多个元素使用相同的键,则只会使用最后一个键,因为所有其他元素都会被覆盖。
http://www.php.net/manual/en/function.array-flip.php
array_flip()以翻转顺序返回一个数组,即来自trans的键成为值,而来自trans的值成为键。
请注意,trans的值必须是有效键,即它们必须是整数或字符串。如果值的类型错误,将发出警告,并且相关的键/值对将不包含在结果中。
如果值有多次出现,则最新的密钥将用作其值,而其他所有密钥将丢失。