PHP foreach未保存JSON中的所有数据

PHP foreach未保存JSON中的所有数据,php,arrays,json,elgg,Php,Arrays,Json,Elgg,我从php中的JSON数组中提取数据。 一切都按预期进行,但循环中的某些部分丢失了,它只拉第一个。 请帮忙。 多谢各位 以下是Json: $json = ' { "theId": "fB17", "loadId": "82387T", "description": "Short description", "contact": "Name of person", "contactinfo": "Phone number or email of contac

我从php中的JSON数组中提取数据。 一切都按预期进行,但循环中的某些部分丢失了,它只拉第一个。 请帮忙。 多谢各位

以下是Json:

$json = '
{
    "theId": "fB17",
    "loadId": "82387T",
    "description": "Short description",
    "contact": "Name of person",
    "contactinfo": "Phone number or email of contact person",
    "pickupaddress": "Address",
    "parts": [
        { "number": "655-2032B" },
        { "number": "655-2056" },
        { "number": "655-2056" },
        { "number": "300-85091" }
    ]
}';
PHP代码:

    $data = json_decode($json);
    $theId .= $data->theId;
    $loadId .= $data->loadId;
    $description .= $data->description;
    $contact .= $data->contact;
    $contactinfo .= $data->contactinfo;
    $pickupaddress .= $data->pickupaddress;

    ALL ABOVE GET PULLED FROM JSON AND SAVED PROPERLY
保存数据

    $obj = new ElggObject();
    $obj->subtype = "load";
    $obj->description = strip_tags($description);
    $obj->title = $title.$theId.'-'.$loadId;
    $obj->contact = $contact;
    $obj->contactinfo = $contactinfo;
    $obj->pickupaddress = $pickupaddress;

    $guid = $obj->save();
对象与基本信息一起保存

现在我们来看看Json中的“部件”数据

foreach ($data->parts as $core_title) {

    // Getting "parts' value from Json
    $titlename = $core_title->number;

    //Now need to use that data and find existing entity with that title in Database

    $dbprefix = elgg_get_config('dbprefix');

    $options['joins'][] = "JOIN {$dbprefix}objects_entity oe ON oe.guid = e.guid";
    $options['wheres'][] = "oe.title = '$titlename'";
    $options['types'] = array('object');
    $options['subtypes'] = array('core');
    $options['limit'] = 1;

    $entity = elgg_get_entities($options);
    // I got that entity that matches the title

    //Now get GUID of the entity
    foreach ($entity as $o) {
        $boxg = $o->guid;
    }

    // It works I get the GUID as $boxg but now need to save EACH $data->parts as annotation to database

    $obj->annotate('cores', $boxg);
}
它只从Json(655-2032B)中获取第一个,并只保存那个

如果我这样做,它会保存每个$data->parts值,而不仅仅是第一个值:

foreach ($data->parts as $core_title) {
    $titlename = $core_title->number;

    $obj->annotate('cores', $titlename);
}

这种代码毫无意义:

//Now get GUID of the entity
foreach ($entity as $o) {
    $boxg = $o->guid;
}
它遍历
$entity
中的所有项目,并不断覆盖
$boxg
值,而不实际处理该值

这个foreach循环的结果是
$boxg
保存
$entity
中最后一个项目的GUID,然后只有一个值用于注释:

    $obj->annotate('cores', $boxg);
这是你真正想做的吗?在foreach循环中不应该使用annotate方法吗

除此之外,很难给您一个明确的答案,因为您的代码相当晦涩,而且解释得不清楚。

最终找到了答案。 这不是foreach,而是里面的东西

最后生成了一个函数,该函数执行数据库查询以查找具有该标题的现有实体

这就是我的结局。 谢谢大家的帮助

foreach ($data->parts as $core_title) {

    $titlename = $core_title->number;

    $entity = get_object_by_title('core',$titlename);

    foreach ($entity as $o) { 
    $coreguidd = $o->guid; 
    $obj->annotate('cores', $coreguidd);
    }


    }   

foreach
无罪。错误可能在
$obj->annotate('cores',$titlename)中。它是从
parts
数组中为每个元素调用的,只有您知道
ElggObject::annotate()
方法的外观。您将
parts
保存在哪里?这是否在
annotate()方法中?如果是这样,那么传递
$titlename
和传递
$boxg
到方法之间有什么区别?@axiac$obj->annotate('cores',$titlename);在数据库中为main$obj创建注释,但它只保存第一个注释,而不获取Json中的所有4个注释。@Matey parts数组提取标题(Json中的数字),然后使用该标题搜索具有与
$entity=elgg_get_entities($options)匹配标题的现有实体
一旦找到它,我需要获取实体的GUID(我通过
$boxg=$o->GUID;
)所以每个$data->Part都必须经过这个过程,然后我需要用找到的实体的GUID注释每一个,即
$boxg
。所以似乎
$obj->annotate('cores',$titlename)需要去其他地方或在它自己的foreach中?让我相信这是我的foreach循环的原因是:如果我只使用这个:
foreach($data->parts as$core\u title){$attachment=$core\u title->number;$obj->annotate('cores',$attachment);}
它创建注释,每个数字都作为值。(655-2032B、655-2056和300-85091)但我需要首先找到每个数字都有标题的对象,然后为每个数字用该对象的GUID进行注释。