Convert object into normal multidimensional php array - php

I have a php variable $response containing an object with protected keys:
FindCompletedItemsResponse Object (
[searchResult:protected] => SearchResult Object (
[item:protected] => Array (
[0] => SearchItem Object (
[itemId:protected] => 383198481839
[title:protected] => Matchbox SCX SRS2 Jaguar "XJR-14" Super Racing Castrol #4 Slot Car 1/32 NIB
[globalId:protected] => EBAY-US
[primaryCategory:protected] => Category Object (
[categoryId:protected] => 4781
[categoryName:protected] => 1970-Now
)
[galleryURL:protected] => https://thumbs4.ebaystatic.com/m/mslyccjMA3BvwuDua4N-kkg/140.jpg
[viewItemURL:protected] => https://www.ebay.com/itm/Matchbox-SCX-SRS2-Jaguar-XJR-14-Super-Racing-Castrol-4-Slot-Car-1-32-NIB-/383198481839
[paymentMethod:protected] => Array ( [0] => PayPal )
[postalCode:protected] => 923**
[location:protected] => Fontana,CA,USA
[country:protected] => US
[shippingInfo:protected] => ShippingInfo Object (
[shippingServiceCost:protected] => Amount Object (
[attributeValues] => Array (
[currencyId] => USD
)
[value:protected] => 8.95
)
[shippingType:protected] => Flat
[shipToLocations:protected] => Array (
[0] => Worldwide
)
[expeditedShipping:protected] => 1
[handlingTime:protected] => 1
)
[sellingStatus:protected] => SellingStatus Object (
[currentPrice:protected] => Amount Object (
[attributeValues] => Array (
[currencyId] => USD
)
[value:protected] => 49.95
)
[convertedCurrentPrice:protected] => Amount Object (
[attributeValues] => Array (
[currencyId] => USD
)
[value:protected] => 49.95
)
[sellingState:protected] => EndedWithSales
)
[listingInfo:protected] => ListingInfo Object (
[startTime:protected] => 2019-10-07T18:28:15.000Z
[endTime:protected] => 2020-01-15T22:19:56.000Z
[listingType:protected] => StoreInventory
)
[returnsAccepted:protected] => 1
[condition:protected] => Condition Object (
[conditionId:protected] => 1000
[conditionDisplayName:protected] => New
)
)
)
[attributeValues] => Array (
[count] => 1
)
)
[paginationOutput:protected] => PaginationOutput Object (
[pageNumber:protected] => 1
[entriesPerPage:protected] => 100
[totalPages:protected] => 1
[totalEntries:protected] => 1
)
[ack:protected] => Success
[version:protected] => 1.13.0
[timestamp:protected] => 2020-04-09T10:01:15.148Z
)
I would like to convert this to a normal multidimensional php array where I can access e.g. the title like $response[0]["title"].
I tried get_object_vars($response) and json_decode(json_encode($response), true) but that is not doing anything when I am looking at the printed results.
and I tried this function:
function o2a($obj) {
if(!is_array($obj) && !is_object($obj)) return $obj;
if(is_object($obj)) $obj = get_object_vars($obj);
return array_map(__FUNCTION__, $obj);
}
but it just gives an empty array :(.
Thank you in advance for your help.

Related

Get Array in foreach loop from string

I have an Array of Strings, each String that exist in Advanced Custom Fields groups should be returned in foreach loop. Final results should be a single array of all values.
$lubuvna_groups = acf_get_field_groups();
$ArrayDiffs = array_diff($resultsFilesKey, $resultsKey);
foreach($ArrayDiffs as $ArrayDiff) {
$resultsFileToImports[] = $ArrayDiff;
}
//$keysToImports = implode(", ",$resultsFileToImports);
$keysToImports = 'group_lubuvna_contact, group_lubuvna_subscriber';
foreach($resultsFileToImports as $resultsFileToImportsKey) {
$keysToImports_filtered = array_filter($lubuvna_groups, function($el) use ($keysToImports) {
return ( strpos($el['key'], $keysToImports) !== false );
});
}
The above code returns only if one string exists in $keysToImports. Once there are more than one value it doesn't work. I am sure i am missing something, but can't find any solution in here!
It shows me empty Array:
Array ( )
Maybe there is a different way how to get the arrays without strpos?
Final Array should looks like following:
Array ( [0] => Array ( [ID] => 0 [key] => group_lubuvna_contact [title] => ACF Fields [fields] => Array ( ) [location] => Array ( [0] => Array ( [0] => Array ( [param] => post_type [operator] => == [value] => page ) ) ) [menu_order] => 0 [position] => normal [style] => default [label_placement] => top [instruction_placement] => label [hide_on_screen] => [active] => 1 [description] => [local] => json [modified] => 1592781382 [_valid] => 1 ) [1] => Array ( [ID] => 0 [key] => group_lubuvna_subscriber [title] => Lubuvna - Subscriber Fields [fields] => Array ( ) [location] => Array ( [0] => Array ( [0] => Array ( [param] => post_type [operator] => == [value] => post ) ) [1] => Array ( [0] => Array ( [param] => post_type [operator] => == [value] => page ) ) [2] => Array ( [0] => Array ( [param] => post_type [operator] => == [value] => lubuvna_subscriber ) ) ) [menu_order] => 0 [position] => normal [style] => default [label_placement] => top [instruction_placement] => label [hide_on_screen] => [active] => 1 [description] => [local] => json [modified] => 1592781369 [_valid] => 1 ) )
Try changing:
$keysToImports = 'group_lubuvna_contact', 'group_lubuvna_subscriber';
// then return
return ( strpos($el['key'], $keysToImports) !== false );
to
$keysToImports = ['group_lubuvna_contact', 'group_lubuvna_subscriber'];
// then return
return in_array($el['key'], $keysToImports);
Full code update:
$lubuvna_groups = acf_get_field_groups();
$ArrayDiffs = array_diff($resultsFilesKey, $resultsKey);
foreach($ArrayDiffs as $ArrayDiff) {
$resultsFileToImports[] = $ArrayDiff;
}
$keysToImports = ['group_lubuvna_contact', 'group_lubuvna_subscriber'];
foreach($resultsFileToImports as $resultsFileToImportsKey) {
$keysToImports_filtered = array_filter($lubuvna_groups, function($el) use ($keysToImports) {
return in_array($el['key'], $keysToImports);
});
}

json array sort by value in php

I have JSON arrays of objects. I am trying to sort an array using usort. I want to use value field from field_listing_order. It sorted using value. I am missing something but not able to figure it out. please review the code. Thanks!
stdClass Object
(
[node_title] => abc
[nid] => 2281
[field_api_order_value] => 201
[field_node_entity_type] => node
[_data] => Array
(
[nid] => Array
(
[entity_type] => node
[entity] => stdClass Object
(
[title] => abc
[field_listing_order] => Array
(
[und] => Array
(
[0] => Array
(
[value] => 8
[format] =>
[safe_value] => 8
)
)
)
)
)
)
)
stdClass Object
(
[node_title] => abc
[nid] => 2243
[field_api_order_value] => 204
[field_node_entity_type] => node
[_data] => Array
(
[nid] => Array
(
[entity_type] => node
[entity] => stdClass Object
(
[title] => abc
[field_listing_order] => Array
(
[und] => Array
(
[0] => Array
(
[value] => 3
[format] =>
[safe_value] => 3
)
)
)
)
)
)
) stdClass Object
(
[node_title] => abc
[nid] => 2431
[field_api_order_value] => 242
[field_node_entity_type] => node
[_data] => Array
(
[nid] => Array
(
[entity_type] => node
[entity] => stdClass Object
(
[title] => abc
[field_listing_order] => Array
(
[und] => Array
(
[0] => Array
(
[value] => 1
[format] =>
[safe_value] => 1
)
)
)
)
)
)
)
and So on ...
foreach ($view->result as $result) {
$node = $result->_data['nid']['entity'];
$listing_order = $node->field_listing_order[LANGUAGE_NONE][0];
.....
// code goes here and it works well. sorting issue
}
usort ($node->field_listing_order[LANGUAGE_NONE][0], function($a, $b){
return strcmp($a->value, $b->value);
}); ?>
If you need to sort all the nodes using the field_listing_order value, you need to compare the values along the full path, from the first object to the value:
usort($view->result, function($a, $b) {
$la = $a->_data['nid']['entity']->field_listing_order[LANGUAGE_NONE][0]['value'];
$lb = $b->_data['nid']['entity']->field_listing_order[LANGUAGE_NONE][0]['value'];
return $la - $lb ;
});
In this case $a and $b are two different nodes which could be compared. That why you should compare the field_listing_order's value of these nodes. The answer is working with $la- $lb

retrieve array two dimension php

i have create array two dimension like this and how i can retrive array two dimension
stdClass Object
(
[error_code] => 0
[error_desc] =>
[data] => Array`enter code here`
(
[0] => stdClass Object
(
[nama_mahasiswa] => STANY SUMARNA
[jenis_kelamin] => L
[tanggal_lahir] => 1996-07-31
[nama_status_mahasiswa] => AKTIF
[nim] => 16304117
[id_periode] => 20161
)
[1] => stdClass Object
(
[nama_mahasiswa] => ADAM
[jenis_kelamin] => L
[tanggal_lahir] => 1996-07-31
[nama_status_mahasiswa] => AKTIF
[nim] => 16304117
[id_periode] => 20161
)
[2] => stdClass Object
(
[nama_mahasiswa] => STANY SUMARNA
[jenis_kelamin] => L
[tanggal_lahir] => 1996-07-31
[nama_status_mahasiswa] => AKTIF
[nim] => 16304117
[id_periode] => 20161
)
)
try following code
lets say $array = main array
$error_code = $array->error_code;
foreach($array->data as $row){
$nama_mahasiswa = $row->nama_mahasiswa;
$jenis_kelamin = $row->jenis_kelamin;
}

Extract a value from a data structure to a variable

I need help in extracting "Duration" from the data structure below, to a variable called var_dur.
The data comes from: print_r($data);
Guzzle\Service\Resource\Model Object
(
[structure:protected] =>
[data:protected] => Array
(
[Job] => Array
(
[Arn] => arn:aws:elastictranscoder:us-west-2:98yufdos8u:job/fsdoiufds98u
[Id] => fdsu98sdufio
[Input] => Array
(
[AspectRatio] => auto
[Container] => auto
[FrameRate] => auto
[Interlaced] => auto
[Key] => iudyf98udsf
[Resolution] => auto
)
[Output] => Array
(
[AlbumArt] =>
[Composition] =>
[Duration] => 31
[Height] => 522
[Id] => 1
[Key] => dlsjf9ds8uf9d8sjuf9s.mp4
[PresetId] => sdufhy89dsfu98dsf
[Rotate] => 0
[SegmentDuration] =>
[Status] => Complete
[StatusDetail] =>
[ThumbnailPattern] => filename-700thumb-{resolution}-{count}
[Watermarks] => Array
(
)
[Width] => 640
)
[OutputKeyPrefix] =>
[Outputs] => Array
(
[0] => Array
(
[AlbumArt] =>
[Composition] =>
[Duration] => 31
[Height] => 522
[Id] => 1
[Key] => dlsjf9ds8uf9d8sjuf9s.mp4
[PresetId] => duisfy98dsuf89sd
[Rotate] => 0
[SegmentDuration] =>
[Status] => Complete
[StatusDetail] =>
[ThumbnailPattern] => filename-700thumb-{resolution}-{count}
[Watermarks] => Array
(
)
[Width] => 640
)
)
[PipelineId] => dsuf89dsuf89d
[Playlists] => Array
(
)
[Status] => Complete
)
)
)
Do something like this to iterate over the Array
function searchfor($text, $array) {
foreach (array_expression as $key => $val)
if($key == $text){
return $val
}
if(is_array($var){
return searchfor($text, $var);
}
}
return null;
}
Try it
$reflect = new ReflectionClass(OBJECT);
$props = $reflect->getProperties();
foreach ($props as $prop) {
print $prop->getName();
var_dump($prop->getValue());
}
About reflection class http://www.php.net/manual/en/reflectionclass.getproperties.php
About reflection property http://www.php.net/manual/en/class.reflectionproperty.php

Find a value in nested associative array

I want to get the value of 'GUID' with the value of 'SamAccountName'. i.e. I only have the value pf 'SamAccountName' and I would like to get the value of 'GUID' for that part of the array.
Array
(
[0] => Array
(
[DistinguishedName] => CN=johnn#playgroundla,OU=playgroundla,OU=Hosting,DC=exch024,DC=domain,DC=local
[GUID] => 26d7c204-7db7-4601-8cd2-0dd0d3b37d97
[OriginatingServer] => dcprov024-CA-1.exch024.domain.local
[Name] => johnn#playgroundla
[HostingObjectType] => Array
(
[HostingObjectTypes] => Array
(
[0] => ActiveSync
[1] => MSExchange2007Mailbox
[2] => ActiveDirectoryUser
)
)
[HostingOwners] => Array
(
[HostingObjectOwners] => Array
(
[0] => MSExchange2007Mailboxes
[1] => ActiveDirectoryUsers
)
)
[Attributes] => Array
(
[Hidden] =>
[ReadOnly] =>
[SpecialAccess] =>
[Items] => Array
(
)
)
[DisplayName] => John Nolan
[SamAccountName] => johnn_playgroundla
[FullSamAccountName] => EXCH024\johnn_playgroundla
[UserPrincipalName] => johnn#playgroundla.com
[AccountExpires] =>
[Enabled] =>
[EnabledFeatures] => Array
(
[string] => Array
(
[0] => ActiveSync
[1] => MSExchangeMailboxes
[2] => ActiveDirectoryUsers
)
)
[LastLogonTimestamp] =>
)
[1] => Array
(
[DistinguishedName] => CN=csliney#playgroundla,OU=playgroundla,OU=Hosting,DC=exch024,DC=domain,DC=local
[GUID] => 71224be8-1b8b-46e7-97ef-2cd873bf9b7f
[OriginatingServer] => dcprov024-CA-1.exch024.domain.local
[Name] => csliney#playgroundla
[HostingObjectType] => Array
(
[HostingObjectTypes] => Array
(
[0] => ActiveSync
[1] => MSExchange2007Mailbox
[2] => ActiveDirectoryUser
)
)
[HostingOwners] => Array
(
[HostingObjectOwners] => Array
(
[0] => MSExchange2007Mailboxes
[1] => ActiveDirectoryUsers
)
)
[Attributes] => Array
(
[Hidden] =>
[ReadOnly] =>
[SpecialAccess] =>
[Items] => Array
(
)
)
[DisplayName] => Christopher Sliney
[SamAccountName] => csliney_playgroundla
[FullSamAccountName] => EXCH024\csliney_playgroundla
[UserPrincipalName] => csliney#playgroundla.com
[AccountExpires] =>
[Enabled] =>
[EnabledFeatures] => Array
(
[string] => Array
(
[0] => ActiveSync
[1] => MSExchangeMailboxes
[2] => ActiveDirectoryUsers
)
)
[LastLogonTimestamp] =>
)
[2] => Array
(
[DistinguishedName] => CN=lee#playgroundla,OU=playgroundla,OU=Hosting,DC=exch024,DC=domain,DC=local
[GUID] => b428b57f-4cd4-4243-a76a-f25f5ff3be97
[OriginatingServer] => dcprov024-CA-1.exch024.domain.local
[Name] => lee#playgroundla
[HostingObjectType] => Array
(
[HostingObjectTypes] => Array
(
[0] => MSExchange2007Mailbox
[1] => ActiveDirectoryUser
)
)
[HostingOwners] => Array
(
[HostingObjectOwners] => Array
(
[0] => MSExchange2007Mailboxes
[1] => ActiveDirectoryUsers
)
)
[Attributes] => Array
(
[Hidden] =>
[ReadOnly] =>
[SpecialAccess] =>
[Items] => Array
(
)
)
[DisplayName] => Lee Roderick
[SamAccountName] => lee_playgroundla
[FullSamAccountName] => EXCH024\lee_playgroundla
[UserPrincipalName] => lee#playgroundla.com
[AccountExpires] =>
[Enabled] =>
[EnabledFeatures] => Array
(
[string] => Array
(
[0] => MSExchangeMailboxes
[1] => ActiveDirectoryUsers
)
)
[LastLogonTimestamp] =>
)
[3] => Array
(
[DistinguishedName] => CN=theresa#playgroundla,OU=playgroundla,OU=Hosting,DC=exch024,DC=domain,DC=local
[GUID] => 4b2aee17-9e88-4de9-b95b-63a9877835a6
[OriginatingServer] => dcprov024-CA-1.exch024.domain.local
[Name] => theresa#playgroundla
[HostingObjectType] => Array
(
[HostingObjectTypes] => Array
(
[0] => ActiveSync
[1] => MSExchange2007Mailbox
[2] => ActiveDirectoryUser
)
)
[HostingOwners] => Array
(
[HostingObjectOwners] => Array
(
[0] => MSExchange2007Mailboxes
[1] => ActiveDirectoryUsers
)
)
[Attributes] => Array
(
[Hidden] =>
[ReadOnly] =>
[SpecialAccess] =>
[Items] => Array
(
)
)
[DisplayName] => Theresa Baker
[SamAccountName] => theresa_playgroundla
[FullSamAccountName] => EXCH024\theresa_playgroundla
[UserPrincipalName] => theresa#playgroundla.com
[AccountExpires] =>
[Enabled] =>
[EnabledFeatures] => Array
(
[string] => Array
(
[0] => ActiveSync
[1] => MSExchangeMailboxes
[2] => ActiveDirectoryUsers
)
)
[LastLogonTimestamp] =>
)
)
This was originally a stdClass object but I used json_decode(json_encode($obj), true) to convert to an associative array.
Sounds like you want to get the GUID portion for the value of 'SamAccountName'. Use a foreach loop:
function getGUID($san, $array) {
foreach($array as $a) {
if($a['SamAccountName'] == $san) {
return $a['GUID'];
}
}
return false;
}
$guid = getGUID("SamAccountNameHere", $yourArray);
You can use a simple loop to fetch it
$id = 0;
foreach($data as $item) {
if (isset($item['SamAccountName']) && 'accountName' == $item['SamAccountName']) {
$id = $item['GUID'];
break;
}
}
var_dump($id);
is this what you are looking for?
function findBySam($arrayList, $sam) {
foreach($arrayList as $array) {
if($array['SamAccountName'] == $sam) {
return $array;
}
}
return false;
}
Here is an example of a function that you could use. This assumes that there will be only one object with the SamAccountName that you supply in the array (it just uses the first one that it finds). It returns the GUID of the matching array and false if it cannot find an array with a matching SamAccountName.
function getGuidForSamAccountName($arr, $name) {
foreach ($arr as $elem) {
if ($elem['SamAccountName'] === $name) {
return $elem['GUID'];
}
}
return false; //No match found
}
You can use array_filter function of php:
http://php.net/manual/en/function.array-filter.php
example:
$GUID = "sample";
array_filter($array, "findElement");
function findElement($el) {
return $el["GUID"] == $_GLOBAL["GUID"];
}
Not a very elegant solution... but it should work.

Categories