0

次のような配列があります。

array(
    0 => object //ticket,
    1 => object //user,
    2 => object //employee,
    3 => object //ticket,
    4 => object //user
    5 => object //ticket,
    6 => object //employee
);

このことから、チケット オブジェクトは常に存在するのに対し、従業員オブジェクトとユーザー オブジェクトはそれぞれオプションであることがわかります。私がやりたいのは、それらをループして次のように整理することです。

array(
    [0] => array(
        [0] => object //ticket,
        [1] => object //user,
        [2] => object //employee,
    )
)

私が問題を抱えているのは、ユーザーと従業員がオプションであるため、上記のモデルに基づいて正しくインデックスを作成する方法がわかりません。そうではありません、そのインデックスをnullにしたいです)。何か案は?

編集: 例:

for ($i = 0; $i < count($result); $i++) {
        if ($result[$i] instanceof Ticket) {
            continue;
        } else {
            $newResult[$i][] = $result[$i]; //maybe I'm brainfarting, but cannot figure how to identify the last ticket index
        }
    }
4

3 に答える 3

1

これはあなた自身の答えに似ていますが、完了$newResult時にインデックスを再作成する必要はありません。

$newIndex = -1;
$newResult = array();
foreach ($result as $object) {
    if ($object instanceof Ticket) {
        $newResult[] = array($object);
        $newIndex++;
    } else {
        $newResult[$newIndex][] = $object;
    }
}

ただし、元の質問では、サブ配列の未使用の要素を に設定することに言及しましたnull。あなたの答えはそれをしないので、私もしませんでした。

于 2013-06-27T21:31:31.817 に答える
0

ええ、私は間違いなく発狂しました。時間を無駄にして申し訳ありません。ループは次のとおりです。

$lastTicketIndex = 0;
    for ($i = 0; $i < count($result) - 1; $i++) {
        if ($result[$i] instanceof Ticket) {
            $newResult[$i][] = $result[$i];
            $lastTicketIndex = $i;
            continue;
        } else {
            $newResult[$lastTicketIndex][] = $result[$i];
        }
    }
于 2013-06-27T21:15:33.877 に答える