Я работаю с API-интерфейсом Zoho CRM и смог извлечь идентификатор продукта, когда вставлял только один продукт, но не могу понять, как это сделать с несколькими продуктами. https://www.zoho.com/crm/help/api/insertrecords.html#Insert_Multiple_records
Я преобразовываю ответ в simpleXMLElement и могу легко получить первый идентификатор продукта с помощью:
...curl stuff
$data = curl_exec($ch);
$xml = new SimpleXMLElement($data);
$product_id = $xml->result->recorddetail->FL[0];
Вопрос заключается в том, если я отправлю несколько идентификаторов продуктов, как я получу каждый из них в цикле, так как мой код вернет только первый идентификатор продукта успешно. Это пример ответа от 2 продуктов, вставленных в API, и возвращенного ответа:
SimpleXMLElement Object ( [@attributes] => Array ( [uri] =>
/crm/private/xml/Products/insertRecords ) [result] => SimpleXMLElement
Object ( [message] => Record(s) added successfully [recorddetail] => Array (
[0] => SimpleXMLElement Object ( [FL] => Array ( [0] => **2389399000000122065**
[1] => 2017-03-12 21:33:50 [2] => 2017-03-12 21:33:50 [3] =>
SimpleXMLElement Object ( [@attributes] => Array ( [val] => Created By ) )
[4] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => Modified
By ) ) ) ) [1] => SimpleXMLElement Object ( [FL] => Array ( [0] =>
**2389399000000122066** [1] => 2017-03-12 21:33:50 [2] => 2017-03-12 21:33:50
[3] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => Created
By ) ) [4] => SimpleXMLElement Object ( [@attributes] => Array ( [val] =>
Modified By ) ) ) ) ) ) )
Не уверен, что он выделен жирным шрифтом, но два значения, заключенные в ** ** — это то, что я хочу извлечь.
Ключом к этому является понимание того, что это:
$xml->result->recorddetail->FL[0];
Это просто сокращение для этого:
$xml->result[0]->recorddetail[0]->FL[0];
Это должно сделать очевидным, что для доступа ко 2-му recorddetail
(с указателем 1
), вы могли бы написать это:
$xml->result->recorddetail[1]->FL[0];
Благодаря волшебству SimpleXML вы также можете узнать, сколько их:
count($xml->result->recorddetail);
И наиболее актуально для вашего случая, зациклите их:
foreach ( $xml->result->recorddetail as $recorddetail ) {
$product_id = $recorddetail->FL[0];
}
В заключение, вы, вероятно, хотите $product_id
переменная для хранения обычной строки, а не объекта SimpleXML; вы получаете это с помощью «string cast», например так:
$product_id = (string)$recorddetail->FL[0];
Других решений пока нет …