从数组中获取一组值

时间:2018-03-20 07:59:20

标签: php arrays

我有一组数组:

$nums = array(2,3,1); 
$data = array(11,22,33,44,55,66);

我想要做的是从每个$nums数组中获取一组$ data数组,

输出必须是:

output:
2=11,22
3=33,44,55
1=66 

我到目前为止尝试的是切片数组并从数组中删除切片值,但我没有得到正确的输出。

for ($i=0; $i < count($nums); $i++) { 
    $a = array_slice($data,0,$nums[$i]);
    for ($x=0; $x < $nums[$i]; $x++) { 
        unset($data[0]);
    }
}

3 个答案:

答案 0 :(得分:3)

另一种选择是使用另一种味道documentation,它基本上根据您输入的偏移量来获取数组。它已经处理了未设置的部分,因为它已经删除了您选择的部分。

$out = array();
foreach ($nums as $n) {
    $remove = array_splice($data, 0, $n);
    $out[] = $remove;
    echo $n . '=' . implode(',', $remove), "\n";
}
// since nums has 2, 3, 1, what it does is, each iteration, take 2, take 3, take 1

array_splice

此外,你可以做一个替代方案,根本没有任何功能。你需要另一个循环,只需保存/记录最后一个索引,以便你知道从哪里开始下一个数字提取:

$last = 0; // recorder
$cnt = count($data);
for ($i = 0; $i < count($nums); $i++) {
    $n = $nums[$i];
    echo $n . '=';
    for ($h = 0; $h < $n; $h++) {
        echo $data[$last] . ', ';
        $last++;
    }
    echo "\n";
}

答案 1 :(得分:2)

您可以array_shift删除第一个元素。

$nums = array(2,3,1); 
$data = array(11,22,33,44,55,66);

foreach( $nums as $num ){
    $t = array();
    for ( $x = $num; $x>0; $x-- ) $t[] = array_shift($data);

    echo $num . " = " . implode(",",$t) . "<br />";
}

这将导致:

2 = 11,22
3 = 33,44,55
1 = 66

答案 2 :(得分:1)

这是最简单,最简单的方法,

<?php

$nums = array(2,3,1); 
$data = array(11,22,33,44,55,66);
$startingPoint = 0;
echo "output:"."\n";
foreach($nums as $num){
  $sliced_array = array_slice($data, $startingPoint, $num);
  $startingPoint = $num;
  echo $num."=".implode(",", $sliced_array)."\n";
}
?>