PHP foreach未保存JSON中的所有数据
我从php中的JSON数组中提取数据。 一切都按预期进行,但循环中的某些部分丢失了,它只拉第一个。 请帮忙。 多谢各位 以下是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
$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进行注释。