从数组中删除对象;如何避免空值

时间:2012-11-02 07:15:27

标签: php arrays class object

我有一个数组是我在会话lifeFleetSelectedTrucksList中携带的对象 我也有类fleetUnit

的对象
class fleetUnit {
    public $idgps_unit = null;
    public $serial = null;
}

class lifeFleetSelectedTrucksList {
    public $arrayList = array();
}

$listOfTrucks = new lifeFleetSelectedTrucksList(); //this is the array that I carry in session
if (!isset($_SESSION['lifeFleetSelectedTrucksList'])) {
    $_SESSION['lifeFleetSelectedTrucksList'] == null; //null the session and add new list to it.
} else {
    $listOfTrucks = $_SESSION['lifeFleetSelectedTrucksList'];
}

我用它来从数组中删除元素:

$listOfTrucks = removeElement($listOfTrucks, $serial);

这是我的函数,删除元素并返回没有元素的数组:

function removeElement($listOfTrucks, $remove) {
    for ($i = 0; $i < count($listOfTrucks->arrayList); $i++) {
        $unit = new fleetUnit();
        $unit = $listOfTrucks->arrayList[$i];
        if ($unit->serial == $remove) {
            unset($listOfTrucks->arrayList[$i]);
            break;
        } elseif ($unit->serial == '') {
            unset($listOfTrucks->arrayList[$i]);
        }
    }
    return $listOfTrucks;
}

嗯,它的工作方式 - 元素被删除了,但我的数组有一堆空的vaues。如何返回不包含null元素的数组?似乎我没有正确起诉。

2 个答案:

答案 0 :(得分:3)

我认为你的意思是数组键不再连续。除非您将值设置为null,否则数组在PHP中没有“空值”。

$array = array('foo', 'bar', 'baz');
// array(0 => 'foo', 1 => 'bar', 2 => 'baz');

unset($array[1]);

// array(0 => 'foo', 2 => 'baz');

两种方法:

  1. 使用foreach循环遍历数组,而不是“手动”for循环,然后按键是什么并不重要。
  2. 使用array_values重置密钥。
  3. 此外,从列表中删除卡车应该是$listOfTrucks的方法,例如$listOfTrucks->remove($remove)。您已经在使用对象,充分发挥它们的潜力!

答案 1 :(得分:1)

您可以使用array_filter

<?php

$entry = array(
         0 => 'foo',
         1 => false,
         2 => -1,
         3 => null,
         4 => ''
      );

print_r(array_filter($entry));
?>

输出:

Array
(
[0] => foo
[2] => -1
)