0

我有两个这样的数组

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
        )
)
4

5 回答 5

4

使用一个循环,array_fliparray_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
        )

)
于 2013-02-25T20:55:28.663 回答
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);
}

键盘上的工作示例。感谢@Michael Irigoyen 提供的数组...

于 2013-02-25T20:55:45.470 回答
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);
于 2013-02-25T20:52:03.417 回答
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);
于 2013-02-25T21:07:06.720 回答
0

您可能还会发现这个关于 array_flip 的说明很有用。

确保 $array1 具有在翻转时可以作为数组键接受的值。

http://php.net/manual/en/language.types.array.php

键可以是整数或字符串。该值可以是任何类型。

此外,还会发生以下关键转换:

包含有效整数的字符串将被转换为整数类型。例如,键“8”实际上将存储在 8 下。另一方面,“08”不会被强制转换,因为它不是有效的十进制整数。浮点数也被转换为整数,这意味着小数部分将被截断。例如,键 8.7 实际上将存储在 8 下。布尔也被转换为整数,即键 true 将实际存储在 1 下,键 false 将存储在 0 下。Null 将被转换为空字符串,即键 null 将实际上存储在“”下。数组和对象不能用作键。这样做会导致警告:非法偏移类型。如果数组声明中的多个元素使用相同的键,则仅使用最后一个,因为所有其他元素都将被覆盖。

http://www.php.net/manual/en/function.array-flip.php

array_flip() 以翻转顺序返回一个数组,即来自 trans 的键成为值,来自 trans 的值成为键。

请注意,trans 的值必须是有效的键,即它们需要是整数或字符串。如果值的类型错误,则会发出警告,并且有问题的键/值对不会包含在结果中。

如果一个值多次出现,最新的键将被用作它的值,所有其他的都将丢失。

于 2013-02-25T21:48:20.387 回答