取消设置数组键并重新排列键

时间:2018-03-17 17:21:51

标签: php arrays

这就是我的数组的样子:

Array
(
    [0] => Array
        (
            [unit] => 10
            [harga] => 15000
        )

    [1] => Array
        (
            [unit] => 7
            [harga] => 10000
        )

    [2] => Array
        (
            [unit] => 12
            [harga] => 123123
        )

)

我想在单位为0时取消设置0键数组并重新排列键,以便1键将替换0。

我就是这样做的:

$jumlah_penjualan = $data - > unit;
while ($jumlah_penjualan > 0) {
    $persediaan_pertama = $persediaan[0]['unit'];
    $harga_persediaan = $persediaan[0]['harga'];
    if ($persediaan_pertama < $jumlah_penjualan) {
        $dijual = $persediaan_pertama;
        $penjualan[] = array(
            'unit' => $dijual,
            'harga' => $harga_persediaan,
            'total' => $dijual * $harga_persediaan);
        $persediaan[0]['unit'] = $persediaan[0]['unit'] - $dijual;
    } else {
        $dijual = $jumlah_penjualan;
        $penjualan[] = array(
            'unit' => $dijual,
            'harga' => $harga_persediaan,
            'total' => $dijual * $harga_persediaan);
        $persediaan[0]['unit'] = $persediaan[0]['unit'] - $dijual;
    }
    if ($persediaan[0]['unit'] == 0) {
        unset($persediaan[0]);
        $persediaan = array_values($persediaan);
    }
    $jumlah_penjualan = $jumlah_penjualan - $dijual;
}

但结果看起来在重新排列数组之前会继续循环。 这是未设置后数组的样子:

  Array(
    [0] => Array
        (
            [unit] => 9
            [harga] => 123123
        )

)

2 个答案:

答案 0 :(得分:0)

如果要删除第一个元素,直到单位不为0,您可以

$arr = array
(
    array
        (
            "unit" => 0,
            "harga" => 15000
        ),
    array
        (
            "unit" => 0,
            "harga" => 10000
        ),
    array
        (
            "unit" => 12,
            "harga" => 123123
        )
);


while( $arr[0]["unit"] == 0 ) {   //Loop until $arr[0]["unit"] is not 0
    unset($arr[0]);               //Remove $arr[0] since unit is 0
    $arr = array_values($arr);    //Make Make element 1 to element 0
}

echo "<pre>";
print_r( $arr );
echo "</pre>";

这将导致:

Array
(
    [0] => Array
        (
            [unit] => 12
            [harga] => 123123
        )

)

答案 1 :(得分:0)

要删除数组的第一个元素并重新索引元素,请使用array_shift。首先,检查单位数是否为零,然后删除第一个元素,如果是这样的话。

if ($arr[0]['unit'] == 0) {
    array_shift($arr);
}

由于语言不能说出你的其他变量甚至意味着什么,你可能想要将它移到你的while循环之外,这样第一个元素只有在你处理后才会删除数组。