简体   繁体   English

PHP:迭代对象数组

[英]PHP: iterating over an array of objects

I have been scratching my head over this code from last 30 min.从过去的 30 分钟开始,我一直在为这段代码挠头。

$orderData = $orderData->get();
//var_dump($orderData);exit;
$orderFinal = array();
foreach ($orderData as $order) {
    //var_dump($order->id);
    if(in_array($order->id, $orderFinal)){
        $orderFinal[$order->id] = (array) $order;
    }else{
        $orderFinal[$order->id] = (array) $order;
    }
    // var_dump($orderFinal[$order->id]);
}
var_dump($orderFinal);exit;

$OrderData looks like this-> $OrderData 看起来像这样->

array(4) {
  [0]=>
  object(stdClass)#299 (7) {
    ["id"]=>
    int(1)
    ["created_at"]=>
    string(19) "2016-09-16 12:07:18"
    ["status"]=>
    int(0)
    ["part_name"]=>
    string(14) "some part name"
    ["ordered_by"]=>
    int(1)
    ["quantity"]=>
    int(11)
    ["order_title"]=>
    string(10) "Some title"
  }
  [1]=>
  object(stdClass)#300 (7) {
    ["id"]=>
    int(32)
    ["created_at"]=>
    string(19) "2016-09-16 10:03:50"
    ["status"]=>
    int(0)
    ["part_name"]=>
    string(16) "new machine part"
    ["ordered_by"]=>
    int(1)
    ["quantity"]=>
    int(12)
    ["order_title"]=>
    string(9) "asdasdasd"
  }
  [2]=>
  object(stdClass)#301 (7) {
    ["id"]=>
    int(35)
    ["created_at"]=>
    string(19) "2016-09-16 10:07:17"
    ["status"]=>
    int(0)
    ["part_name"]=>
    string(28) "another awesome machine part"
    ["ordered_by"]=>
    int(1)
    ["quantity"]=>
    int(123)
    ["order_title"]=>
    string(15) "Some Order Name"
  }
  [3]=>
  object(stdClass)#302 (7) {
    ["id"]=>
    int(35)
    ["created_at"]=>
    string(19) "2016-09-16 10:07:17"
    ["status"]=>
    int(0)
    ["part_name"]=>
    string(14) "some part name"
    ["ordered_by"]=>
    int(1)
    ["quantity"]=>
    int(1022)
    ["order_title"]=>
    string(15) "Some Order Name"
  }
}  

I want result like this:我想要这样的结果:

array(3) {
  [1]=>
  array(7) {
    ["id"]=>
    int(1)
    ["created_at"]=>
    string(19) "2016-09-16 12:07:18"
    ["status"]=>
    int(0)
    ["part_name"]=>
    string(14) "some part name"
    ["ordered_by"]=>
    int(1)
    ["quantity"]=>
    int(11)
    ["order_title"]=>
    string(10) "Some title"
  }
  [32]=>
  array(7) {
    ["id"]=>
    int(32)
    ["created_at"]=>
    string(19) "2016-09-16 10:03:50"
    ["status"]=>
    int(0)
    ["part_name"]=>
    string(16) "new machine part"
    ["ordered_by"]=>
    int(1)
    ["quantity"]=>
    int(12)
    ["order_title"]=>
    string(9) "asdasdasd"
  }
  [35]=>
        [0]=>array(7) {
        ["id"]=>
        int(35)
        ["created_at"]=>
        string(19) "2016-09-16 10:07:17"
        ["status"]=>
        int(0)
        ["part_name"]=>
        string(28) "another awesome machine part"
        ["ordered_by"]=>
        int(1)
        ["quantity"]=>
        int(123)
        ["order_title"]=>
        string(15) "Some Order Name"
        },
  [1]=>array(7) {
    ["id"]=>
    int(35)
    ["created_at"]=>
    string(19) "2016-09-16 10:07:17"
    ["status"]=>
    int(0)
    ["part_name"]=>
    string(14) "some part name"
    ["ordered_by"]=>
    int(1)
    ["quantity"]=>
    int(1022)
    ["order_title"]=>
    string(15) "Some Order Name"
  }
}

What I am getting is -我得到的是 -

array(3) {
  [1]=>
  array(7) {
    ["id"]=>
    int(1)
    ["created_at"]=>
    string(19) "2016-09-16 12:07:18"
    ["status"]=>
    int(0)
    ["part_name"]=>
    string(14) "some part name"
    ["ordered_by"]=>
    int(1)
    ["quantity"]=>
    int(11)
    ["order_title"]=>
    string(10) "Some title"
  }
  [32]=>
  array(7) {
    ["id"]=>
    int(32)
    ["created_at"]=>
    string(19) "2016-09-16 10:03:50"
    ["status"]=>
    int(0)
    ["part_name"]=>
    string(16) "new machine part"
    ["ordered_by"]=>
    int(1)
    ["quantity"]=>
    int(12)
    ["order_title"]=>
    string(9) "asdasdasd"
  }
  [35]=>
  array(7) {
    ["id"]=>
    int(35)
    ["created_at"]=>
    string(19) "2016-09-16 10:07:17"
    ["status"]=>
    int(0)
    ["part_name"]=>
    string(14) "some part name"
    ["ordered_by"]=>
    int(1)
    ["quantity"]=>
    int(1022)
    ["order_title"]=>
    string(15) "Some Order Name"
  }
}

Any help will be highly appreciated.任何帮助将不胜感激。 Thanks谢谢

Try below code:试试下面的代码:

 $orderData = $orderData->get();
 $orderFinal = array();
 foreach ($orderData as $order) {
    //var_dump($order->id);
     if(array_key_exists($order->id, $orderFinal)){

        if (! isset($orderFinal[$order->id][0] ) ){
            $orderFinal[$order->id][0] = $orderFinal[$order->id];
        }
        $orderFinal[$order->id][] = (array) $order;

    }else{
        $orderFinal[$order->id] = (array) $order;
    }
    // var_dump($orderFinal[$order->id]);
}
var_dump($orderFinal);exit;

Both branches of your if statement do the same thing, so obviously something's not right. if 语句的两个分支都做同样的事情,所以很明显有些不对劲。 This should do the trick:这应该可以解决问题:

$orderFinal = array();
foreach ($orderData as $order) {
    if (in_array($order->id, array_keys($orderFinal))) {
        if (isset($orderFinal[$order->id]["id"])) {
            $orderFinal[$order->id] = array($orderFinal[$order->id], (array) $order);
        } else {
            $orderFinal[$order->id][] = (array) $order;
        }
    } else {
        $orderFinal[$order->id] = (array) $order;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM