0

私はセッションで運ぶオブジェクトである配列を持っ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;
}

まあ、うまくいきます-要素は削除されますが、代わりにnull値の束を持つ配列があります。null 要素を含まない配列を返すにはどうすればよいですか? 私は何か正しいことを訴えていないようです。

4

2 に答える 2

3

あなたが言いたいのは、配列キーが連続していないということだと思います。値を に設定しない限り、PHP では配列に「null 値」はありませんnull

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

unset($array[1]);

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

これに対する 2 つのアプローチ:

  1. foreach「手動」ループではなく、を使用して配列をループするforと、キーが何であるかは問題になりません。
  2. でキーをリセットしますarray_values

また、リストからのトラックの削除は、実際には の$listOfTrucksような方法である必要があります$listOfTrucks->remove($remove)。あなたはすでにオブジェクトを使用しています。それらを最大限に活用してください!

于 2012-11-02T07:21:26.550 に答える
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
)
于 2012-11-02T07:19:40.577 に答える