0

我有两个数组,我需要根据值提取第二个数组的值$arr[0]["num"]

$arr = array(
0 => array(
    "id" => 24,
    "num" => 2
),
1 => array(
    "id" => 25,
    "num" => 5
)
2 => array(
    "id" => 26,
    "num" => 3
)
);
$array = array('1','2','3','4','5','6','7','8','9','10');
$new = array();
foreach($arr as $key){
    for($i=0;$i<$key['num'];$i++){
        $new[$key['id']][$i] = $array[$i];
    }
}

是否可以删除第二个数组的值并将其转移到一个新数组中?

我的循环所做的只是在每个循环之后从头开始复制值。我想从第二个数组中删除复制的值。

输出应该是这样的:

Array
(
[24] => Array
    (
        [0] => 1
        [1] => 2
    )

[25] => Array
    (
        [0] => 3
        [1] => 4
        [2] => 5
        [3] => 6
        [4] => 7
    )
[26] => Array
    (
        [0] => 8
        [1] => 9
        [2] => 10
    )
)
4

2 回答 2

1

我建议使用array_shift

$arr = array(
  array(
    "id" => 24,
    "num" => 2
),
  array(
    "id" => 25,
    "num" => 5
),
  array(
    "id" => 26,
    "num" => 3
)
);
$array = array('1','2','3','4','5','6','7','8','9','10');
$new = array();
foreach($arr as $key){
    for($i=0;$i<$key['num'];$i++){
        $new[$key['id']][$i] = $array[0]; // *1
        array_shift($array);
    }
}
echo '<pre>';
print_r($new);

*1 您也必须更改此行。由于 array_shift 删除了第一个数组条目,因此每次迭代都应该访问 array[0]。

输出:

Array
(
    [24] => Array
        (
            [0] => 1
            [1] => 2
        )

    [25] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 5
            [3] => 6
            [4] => 7
        )

    [26] => Array
        (
            [0] => 8
            [1] => 9
            [2] => 10
        )

)
于 2013-08-20T14:53:11.087 回答
1

尝试这个

foreach($arr as $key){
    for($i=0;$i<$key['num'];$i++){
        $new[$key['id']][$i] = $array[$i];

        // unset previous values, in first iteration it will remove 0, 1
        unset($array[$i]);
    }
    // reset the array keys, so for loop $i will start from 0
    $array = array_values($array);  
}

输出:

array (size=3)
  24 => 
    array (size=2)
      0 => string '1' (length=1)
      1 => string '2' (length=1)
  25 => 
    array (size=5)
      0 => string '3' (length=1)
      1 => string '4' (length=1)
      2 => string '5' (length=1)
      3 => string '6' (length=1)
      4 => string '7' (length=1)
  26 => 
    array (size=3)
      0 => string '8' (length=1)
      1 => string '9' (length=1)
      2 => string '10' (length=2)
于 2013-08-20T14:55:59.953 回答