我有一组数组:
$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]);
}
}
答案 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
此外,你可以做一个替代方案,根本没有任何功能。你需要另一个循环,只需保存/记录最后一个索引,以便你知道从哪里开始下一个数字提取:
$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";
}
?>