Php 从不工作的数组中删除元素

Php 从不工作的数组中删除元素,php,arrays,unset,Php,Arrays,Unset,我有以下代码从数组中删除元素: for ($i = 0; $i < count($contracte); $i++) { if ($contracte[$i]['total_luni_contract'] == $contracte[$i]['luni_contract_cu_cheltuieli']) { unset($contracte[$i]); } } 运行代码后,数组保持不变。它应该取消设置$contracte[1],$con

我有以下代码从数组中删除元素:

for ($i = 0; $i < count($contracte); $i++) {  
    if ($contracte[$i]['total_luni_contract'] == $contracte[$i]['luni_contract_cu_cheltuieli']) {
        unset($contracte[$i]);        
    }
}
运行代码后,数组保持不变。它应该取消设置
$contracte[1]
$contracte[2]
$contracte[7]
$contracte[20]


有什么想法吗?

尝试改用阵列拼接

阵列拼接($contracte,$i,1)


此外,当您从数组中删除某些内容时,您还需要减少$i,这样它将再次检查位于$i位置的项目。

在数组上运行一个foreach。已经证明,从当前使用foreach循环迭代的数组中删除密钥是完全安全的

foreach($contracte as $cheie => $contract) {
   if ($contract['total_luni_contract'] == $contract['luni_contract_cu_cheltuieli']) {
      unset($contracte[$cheie]);
   }
}

问题:当循环到达第二个元素(1)时,它会将其取消设置,所以第二个元素会到达该位置。所以在下一个循环中,它检查$i=1,这将是下一个元素。所以(2)被跳过了

解决方案:

使用foreach

foreach($contracte as $key=> $val) {
   if ($val['total_luni_contract'] == $val['luni_contract_cu_cheltuieli']) {
      unset($contracte[$key]);
   }
}

将键设置为字符串-将其设置为关联数组,然后再设置为您的解决方案

如果您的数组是这样的:它将工作

Array
(
    [one] => Array
        (
            [id_contract] => 3
            [numar] => 2955
            [data] => 2011-04-04
            [total_luni_contract] => 2
            [luni_contract_cu_cheltuieli] => 0
        )

    [two] => Array
        (
            [id_contract] => 25
            [numar] => 14
            [data] => 2013-01-07
            [total_luni_contract] => 1
            [luni_contract_cu_cheltuieli] => 1
        )

    [three] => Array
        (
            [id_contract] => 26
            [numar] => 15
            [data] => 2013-01-07
            [total_luni_contract] => 1
            [luni_contract_cu_cheltuieli] => 1
        )

    [four] => Array
        (
            [id_contract] 

在这个简单的示例中,如果unset()确实不应该“不”工作,则IF语句可能无效。试着用回音循环,看看哪些通过了,哪些没有。假阳性结果可能令人恼火^^^是的,它进入if()语句,但似乎它在每次迭代后都会打印一些内容,而不仅仅是在满足条件的迭代之后。
Array
(
    [one] => Array
        (
            [id_contract] => 3
            [numar] => 2955
            [data] => 2011-04-04
            [total_luni_contract] => 2
            [luni_contract_cu_cheltuieli] => 0
        )

    [two] => Array
        (
            [id_contract] => 25
            [numar] => 14
            [data] => 2013-01-07
            [total_luni_contract] => 1
            [luni_contract_cu_cheltuieli] => 1
        )

    [three] => Array
        (
            [id_contract] => 26
            [numar] => 15
            [data] => 2013-01-07
            [total_luni_contract] => 1
            [luni_contract_cu_cheltuieli] => 1
        )

    [four] => Array
        (
            [id_contract]