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,
    )
)

我遇到的问题是因为用户和员工是可选的我不确定如何根据上述模型正确索引,因为偶尔我会遇到一个没有员工或用户的人(如果它不,我希望该索引为空)。有任何想法吗?

编辑:示例:

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 回答
0

您可以使用instanceof检查当前数组元素是哪个类的实例,然后根据需要对其进行分组:)

例子

if( $array[0] instanceof ticket ) {
    // do some magic in here
}

http://php.net/manual/en/internals2.opcodes.instanceof.php

于 2013-06-27T21:05:43.097 回答