【问题标题】:PHP use of array_map array_shift to slice array into odd and even sub arraysPHP 使用 array_map array_shift 将数组切片为奇数和偶数子数组
【发布时间】:2015-01-17 03:02:41
【问题描述】:

根据定义,PHP 的 array_shift 将返回数组中的第一个元素,并且该数组将缩小一个元素。

我想将一个数组交替分割成两个子数组,即索引 0,2,4,6,... 和索引 1,3,5,7,...

我首先将它分成 2 个块,然后我使用 array_map 调用 array_shift。但是,它是正确的(输出如下):

array1: Array ( [0] => greeting [1] => question [2] => response ) 
array2: Array ( [0] => Array ( [0] => greeting [1] => hello ) [1] => Array ( [0] => question [1] => how-are-you ) [2] => Array ( [0] => response [1] => im-fine ) )

代码如下:

$a=array("greeting", "hello", "question", "how-are-you", "response", "im-fine");
$b=array_chunk($a, 2);
$c=array_map("array_shift", $b);
echo "array1: ";
print_r($c);
echo "array2: ";
print_r($b);

array2 在 array_shift 之后似乎没有缩小。这是正确的行为吗?我怎样才能做我打算做的事?

谢谢

【问题讨论】:

标签: php arrays


【解决方案1】:

虽然这已经使用数组函数解决了,但这里是一种低技术解决方案,使用简单的切换来分离奇数和偶数元素...

$in = array("greeting", "hello", "question", "how-are-you", "response", "im-fine");

$i = 0;
$list = array();
foreach ($in as $text)
{
  $list[$i][] = $text;
  $i = 1 - $i;
}

print_r($list[0]);
print_r($list[1]);

结果...

Array ( [0] => greeting [1] => question [2] => response ) 
Array ( [0] => hello [1] => how-are-you [2] => im-fine )

【讨论】:

    【解决方案2】:

    尝试用这种方式分割你的数组或者 EVENODD 键,可能有很多方法可以做到这一点,但这是我使用array_walk的简单方法

    $odd = [];
    $even = [];
    $both = [&$even, &$odd];
    $array=["greeting", "hello", "question", "how-are-you", "response", "im-fine"];
    array_walk($array, function($value, $key) use ($both) { $both[$key % 2][] = $value; });
    print '<pre>';
    print_r($even);
    print_r($odd);
    print '</pre>';
    

    结果: 成功时间:0.02 内存:24448 信号:0

    <pre>Array
    (
        [0] => greeting
        [1] => question
        [2] => response
    )
    Array
    (
        [0] => hello
        [1] => how-are-you
        [2] => im-fine
    )
    

    【讨论】:

    • 嗨,做人:感谢您的建议。第一个有效,第二个打印如下: Array ( ) Array ( )
    • @ShuangLiang 查看我编辑的答案,因为我在第一个解决方案中设置了 $array 变量,所以这里没有设置,这就是你得到 Array() 的原因,现在检查......
    • @Being Human 我看到还剩下一条路。无论哪种方式,只要它有效,它就很重要。谢谢。
    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多