从数组中分离奇数和偶数元素,不使用循环
PHP中有n个元素的数组。必须根据奇数或偶数的元素将元素从数组中分离出来。也就是说,在不遍历原始数组或使用任何循环的情况下,分别打印奇数组和偶数组。
例子
1 2 3 4 5 6 7 | Input : array(2, 5, 6, 3, 0) Output : Odd array: 5 , 3 Even array: 2, 6, 0 Input : $input = array(0, 1, 2, 3, 4, 5) Output : Odd array: 1, 3, 5 Even array: 0, 2, 4 |
这些类型的问题可以很容易地通过遍历数组和分别打印奇数和偶数的元素来解决,但是这会占用更多的代码行,并且会在代码中造成循环开销。因此,为了避免使用循环,我们将尝试使用PHP的一些内置函数。这里我们使用两个PHP数组函数array_filter()和array_values()来解决这个问题。
注意:array_filter()函数只过滤奇数/偶数索引元素及其索引值。应用array_filter()函数后,奇数数组的索引为1,3,5,偶数数组的索引为0,2,4。
算法
1 2 3 4 5 6 7 8 9 | 1.Filter elements : 。 filter odd elements by array_filter(). 。 filter even elements by array_filter(). 2.Re-index Arrays : 。 re-index odd-array by use of array_values(). 。 re-index even-array by use of array_values(). 3.Print both of the odd/even array. |
下面是上述算法的PHP实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <?php // PHP program to separate odd-even indexed // elements of an array // input array $input = array(4, 3, 6, 5, 8, 7, 2); // comparator function to filter odd elements function oddCmp($input) { return ($input & 1); } // comparator function to filter odd elements function evenCmp($input) { return !($input & 1); } // filter odd-index elements $odd = array_filter($input, "oddCmp"); // filter even-index elements $even = array_filter($input, "evenCmp"); // re-index odd array by use of array_values() $odd = array_values(array_filter($odd)); // re-index even array by use of array_values() $even = array_values(array_filter($even)); // print odd-indexed array print"Odd array :\n"; print_r($odd); // print even-indexed array print"\nEven array :\n"; print_r($even); ?> |
输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Odd array : Array ( [0] => 3 [1] => 5 [2] => 7 ) Even array : Array ( [0] => 4 [1] => 6 [2] => 8 [3] => 2 ) |