Как мне получить значение php stdClass Object
Это, вероятно, просто, но я в своем уме.
Я использую API. Я объявляю $checkLead и получаю stdClassObject, который будет отображаться ниже. Я пытаюсь получить значение массива. В этом случае есть одна запись, но она может включать больше в будущем.
Вот что печатается, когда я печатаю.
stdClass Object (
[result] => stdClass Object (
[count] => 1
[leadRecordList] => stdClass Object (
[leadRecord] => stdClass Object (
[Id] => 26
[Email] => test3@test.com
[ForeignSysPersonId] =>
[ForeignSysType] =>
[leadAttributeList] => stdClass Object (
[attribute] => Array (
[0] => stdClass Object (
[attrName] => FirstName
[attrType] => string
[attrValue] => JJ
)
[1] => stdClass Object (
[attrName] => LastName
[attrType] => string
[attrValue] => JJ
)
[2] => stdClass Object (
[attrName] => Website
[attrType] => url
[attrValue] => test.com
)
)
)
)
)
)
)
Вот пример многократного возврата результата.
stdClass Object (
[result] => stdClass Object (
[count] => 2
[leadRecordList] => stdClass Object (
[leadRecord] => Array (
[0] => stdClass Object (
[Id] => 33
[Email] => test3@test.com
[ForeignSysPersonId] =>
[ForeignSysType] =>
[leadAttributeList] => stdClass Object (
[attribute] => Array (
[0] => stdClass Object (
[attrName] => FirstName
[attrType] => string
[attrValue] => jj )
[1] => stdClass Object (
[attrName] => LastName
[attrType] => string
[attrValue] => amonit )
[2] => stdClass Object (
[attrName] => Website
[attrType] => url
[attrValue] => test.com )
)
)
)
[1] => stdClass Object (
[Id] => 26
[Email] => test3@test.com
[ForeignSysPersonId] =>
[ForeignSysType] =>
[leadAttributeList] => stdClass Object (
[attribute] => Array (
[0] => stdClass Object (
[attrName] => FirstName
[attrType] => string
[attrValue] => bob )
[1] => stdClass Object (
[attrName] => LastName
[attrType] => string
[attrValue] => smith )
[2] => stdClass Object (
[attrName] => Phone
[attrType] => phone
[attrValue] => 123-123-1234 )
[3] => stdClass Object (
[attrName] => Website
[attrType] => url
[attrValue] => test.com )
)
)
)
)
)
)
)
Итак, мне было интересно, если кто-то может помочь мне получить значение для FirstName
, Я также хотел бы иметь возможность получить значение, сказав что-то вроде "какова ценность LastName
где FirstName
равно "JJ"
,
4 ответа
Вам нужно будет использовать foreach
перебрать, чтобы найти правильное значение
$lastname = '';
foreach($checkLead->result->leadRecordList->leadRecord as $record) {
$attributes = $record->leadAttributeList->attribute;
$found = false;
$temp_lastname = '';
foreach($attributes as $attr) {
if($attr->attrName == 'LastName') {
$temp_lastname = $attr->attrValue;
}
if($attr->attrName == 'FirstName' && $attr->attrValue == 'JJ') {
$found = true;
}
}
if($found) {
$lastname = $temp_lastname;
break;
}
}
Я считаю, что вы можете использовать код ниже, и он будет работать так, как вы ожидаете:
$lastname = '';
$leadRecord = $checkLead->result->leadRecordList->leadRecord;
if ( $checkLead->result->count > 1 ) {
foreach ( $leadRecord as $leadRecordItem ) {
foreach ( $leadRecordItem->leadAttributeList as $attributes ) {
$found = false;
$temp_lastname = '';
foreach( $attributes as $attr ) {
if($attr->attrName == 'LastName') {
$temp_lastname = $attr->attrValue;
}
if($attr->attrName == 'FirstName' && $attr->attrValue == 'JJ') {
$found = true;
}
}
if($found) {
$lastname = $temp_lastname;
break;
}
}
}
}
else {
foreach ( $leadRecord->leadAttributeList as $attributes ) {
$found = false;
$temp_lastname = '';
foreach( $attributes as $attr ) {
if($attr->attrName == 'LastName') {
$temp_lastname = $attr->attrValue;
}
if($attr->attrName == 'FirstName' && $attr->attrValue == 'JJ') {
$found = true;
}
}
if($found) {
$lastname = $temp_lastname;
break;
}
}
}
echo $lastname;
Я построил оба ваших объекта с нуля и попробовал этот код, и в конце он повторил "JJ" - что, я полагаю, именно то, что вам нужно, по крайней мере, чтобы получить контроль над ним и изменить его к вашим конкретным потребностям.
На всякий случай, если вы хотите попробовать это так, как я, вот как я построил ваш результат с одним и несколькими результатами:
function to_object( $arr ) {
return is_array( $arr ) ? (object) array_map(__FUNCTION__, $arr) : $arr;
}
$checkLeadArr2 = array(
'result' => array(
'count' => 2,
'leadRecordList' => array(
'leadRecord' => array(
array(
'Id' => 33,
'Email' => 'test3@test.com',
'ForeignSysPersonId' => null,
'ForeignSysType' => null,
'leadAttributeList' => array(
'attribute' => array(
array(
'attrName' => 'FirstName',
'attrType' => 'string',
'attrValue' => 'JJ',
),
array(
'attrName' => 'LastName',
'attrType' => 'string',
'attrValue' => 'amonit',
),
array(
'attrName' => 'Website',
'attrType' => 'url',
'attrValue' => 'test.com',
),
)
)
),
array(
'Id' => 26,
'Email' => 'test3@test.com',
'ForeignSysPersonId' => null,
'ForeignSysType' => null,
'leadAttributeList' => array(
'attribute' => array(
array(
'attrName' => 'FirstName',
'attrType' => 'string',
'attrValue' => 'JJ',
),
array(
'attrName' => 'LastName',
'attrType' => 'string',
'attrValue' => 'JJ',
),
array(
'attrName' => 'Website',
'attrType' => 'url',
'attrValue' => 'test.com',
),
)
)
),
)
)
)
);
$checkLeadArr1 = array(
'result' => array(
'count' => 1,
'leadRecordList' => array(
'leadRecord' => array(
'Id' => 26,
'Email' => 'test3@test.com',
'ForeignSysPersonId' => null,
'ForeignSysType' => null,
'leadAttributeList' => array(
'attribute' => array(
array(
'attrName' => 'FirstName',
'attrType' => 'string',
'attrValue' => 'JJ',
),
array(
'attrName' => 'LastName',
'attrType' => 'string',
'attrValue' => 'JJ',
),
array(
'attrName' => 'Website',
'attrType' => 'url',
'attrValue' => 'test.com',
),
)
)
)
)
)
);
$checkLead = to_object( $checkLeadArr1 );
Вам просто нужно поместить этот последний код над циклами foreach, которые я дал вам ранее, и вы можете попробовать возврат нескольких результатов, переключившись с $checkLead = to_object( $checkLeadArr1 );
а также $checkLead = to_object( $checkLeadArr2 );
Дайте мне знать, если это поможет вам.
Чтобы получить первое имя, у вас есть шанс вернуть вам несколько потенциальных клиентов из Marketo, или, в лучшем случае, одного. Вот код для получения этой информации. Надеюсь это поможет.
if (is_object($checkLead)) {
$leadRecord = $checkLead->result->leadRecordList->leadRecord;
if (is_array($leadRecord)) {
//multiple leads returned
//run another foreach within a forloop to get the same values
for($x=0; $x<sizeof($leadRecord); $x++) {
$LeadAttribute = $leadRecord[$x]->leadAttributeList->attribute;
foreach($LeadAttribute as $attribute) {
if($attribute->attrName == 'FirstName') {
echo "\nFirst Name: ".$attribute->attrValue;
}
}
}
} else {
//single lead returned
$LeadAttribute = $leadRecord->leadAttributeList->attribute;
foreach($LeadAttribute as $attribute) {
if($attribute->attrName == 'FirstName') {
echo "\nFirst Name: ".$attribute->attrValue;
}
}
}
}
Простое приведение к массиву должно сразу же сделать доступным stdClassObject:
$myArray = (array)$myUnusableObject;
echo 'What have we here? '.var_export($myArray, true);