Codeigniter Unidentified Index - php

I have a function foo that returns an array with the below structure and what I am trying to work out is there a better way to structure my PHP as I am unsure about the indexing within the foreach as I want every ListingId
Goal:
I am wanting to write a foreach loop that gets the XML <Name> from an external XML document (Have not coded this section yet as I need to pass the ListingID from foointo the url to get the <Name>)
PHP:
$test0 = $this->foo();
$test = $test0[0]['ListingId'];
Structure:
Array ( [0] => Array ( [ListingId] => SimpleXMLElement Object ( [0] => 532712629 ) [ListingCategory] => SimpleXMLElement Object ( [0] => 0350-5748-3400- ) ) [1] => Array ( [ListingId] => SimpleXMLElement Object ( [0] => 532712202 ) [ListingCategory] => SimpleXMLElement Object ( [0] => 0350-5748-3400- ) ) [2] => Array ( [ListingId] => SimpleXMLElement Object ( [0] => 532711566 ) [ListingCategory] => SimpleXMLElement Object ( [0] => 0350-5748-3400- ) ) [3] => Array ( [ListingId] => SimpleXMLElement Object ( [0] => 532710864 ) [ListingCategory] => SimpleXMLElement Object ( [0] => 0350-5748-3400- ) ) [4] => Array ( [ListingId] => SimpleXMLElement Object ( [0] => 532710271 ) [ListingCategory] => SimpleXMLElement Object ( [0] => 0350-5748-3400- ) ) [5] => Array ( [ListingId] => SimpleXMLElement Object ( [0] => 532691526 ) [ListingCategory] => SimpleXMLElement Object ( [0] => 0350-5748-3400- ) ) [6] => Array ( [ListingId] => SimpleXMLElement Object ( [0] => 527496168 ) [ListingCategory] => SimpleXMLElement Object ( [0] => 0350-5748-3399- ) ) )

Try this way:
foreach($this->foo() as $foo) {
//here you can use your ListingId
var_dump($foo['ListingId']);
}

Related

sorting simpleXML object

I have a problem to sort array of SimpleXMLElement Object. The data is:
[ServiceHotel] => Array
(
[0] => SimpleXMLElement Object
(
[#attributes] => Array
(
[availToken] => 0
)
)
[1] => SimpleXMLElement Object
(
[#attributes] => Array
(
[availToken] => 1
)
)
[2] => SimpleXMLElement Object
(
[#attributes] => Array
(
[availToken] => 2
)
)
[3] => SimpleXMLElement Object
(
[#attributes] => Array
(
[availToken] => 3
)
)
)
I want to sort that data, order by availToken in PHP. Can anybody help me?

How to get the name and values from xml array using php

Here is my Xml code:
SimpleXMLElement Object
(
[resultsRows] => SimpleXMLElement Object
(
[row] => Array
(
[0] => SimpleXMLElement Object
(
[dimension] => Array
(
[0] => SimpleXMLElement Object
(
[#attributes] => Array
(
[name] => date
[value] => 20140102
[label] => Date
)
)
[1] => SimpleXMLElement Object
(
[#attributes] => Array
(
[name] => browserType
[value] => Chrome
[label] => Browser Type
)
)
)
[metric] => Array
(
[0] => SimpleXMLElement Object
(
[#attributes] => Array
(
[name] => visitDuration
[value] => 1242
[label] => Avg. Visit Duration
)
)
[1] => SimpleXMLElement Object
(
[#attributes] => Array
(
[name] => bounces
[value] => 3
[label] => Bounces
)
)
[2] => SimpleXMLElement Object
(
[#attributes] => Array
(
[name] => repeatVisitors
[value] => 0
[label] => Repeat Visitors
)
)
[3] => SimpleXMLElement Object
(
[#attributes] => Array
(
[name] => newVisitors
[value] => 5
[label] => New Visitors
)
)
[4] => SimpleXMLElement Object
(
[#attributes] => Array
(
[name] => visits
[value] => 10
[label] => Visits
)
)
[5] => SimpleXMLElement Object
(
[#attributes] => Array
(
[name] => pageViews
[value] => 66
[label] => Page Views
)
)
)
)
)
)
)
Above Xml array need to print like key and values type.The array showing like dimension and metric.I want print the values inside #attributes nested array like key and value.
Thanks.
Found in the comments on php SimpleXml documentation:
function xml2array ( $xmlObject, $out = array () )
{
foreach ( (array) $xmlObject as $index => $node )
$out[$index] = ( is_object ( $node ) ) ? xml2array ( $node ) : $node;
return $out;
}
Check the docs here: http://cl1.php.net/ref.simplexml

XML xpath attribute value result to contain other results

I recently asked a question about how to select a parent's node attribute and its values at the same time using xpath, What i ended up with is :
Parent/#attr|Parent/x
It grab the parent attr's value and all of its x's nodes..
Array
(
[0] => SimpleXMLElement Object
(
[#attributes] => Array
(
[attr] => attrValue
)
)
[1] => SimpleXMLElement Object
(
[0] => 1
)
[2] => SimpleXMLElement Object
(
[0] => 2
)
[3] => SimpleXMLElement Object
(
[0] => 3
)
)
The thing now.. In case there are several Parent nodes, it will mix them together and i wouldn't know which attr belongs to its x's .. it will result something like this :
Array
(
[0] => SimpleXMLElement Object
(
[#attributes] => Array
(
[attr] => attrValue
)
)
[1] => SimpleXMLElement Object
(
[0] => 1
)
[2] => SimpleXMLElement Object
(
[0] => 2
)
[3] => SimpleXMLElement Object
(
[0] => 3
)
[4] => SimpleXMLElement Object
(
[#attributes] => Array
(
[attr] => anotherAttrValue
)
)
[5] => SimpleXMLElement Object
(
[0] => 1
)
[6] => SimpleXMLElement Object
(
[0] => 2
)
...
)
You see, they are all treated as a normal result, what i am trying to do is to make the attr contain all of it's results ( 1, 2, 3 ) in an array or something and the same thing goes to the other attr's to end up with something like this :
Array
(
[0] => SimpleXMLElement Object
(
[#attributes] => Array
(
[attr] => attrValue
)
)
Array
(
[0] => SimpleXMLElement Object
(
[0] => 1
)
[1] => SimpleXMLElement Object
(
[0] => 2
)
[2] => SimpleXMLElement Object
(
[0] => 3
)
)
[1] => SimpleXMLElement Object
(
[#attributes] => Array
(
[attr] => anotherAttrValue
)
)
Array
(
[0] => SimpleXMLElement Object
(
[0] => 1
)
[1] => SimpleXMLElement Object
(
[0] => 2
)
[2] => SimpleXMLElement Object
(
[0] => 3
)
)
)
using the xpath and the way given at first

reorder multidimensional php array trouble

I need to reorder an multidimensional array in php but I can't get it right and I am struggling with foreach, for and while loops for some time now.
This is what I have:
Array
(
[dimension] => Array
(
[dimension.part] => Array
(
[0] => SimpleXMLElement Object
(
[0] => geheel
)
[1] => SimpleXMLElement Object
(
[0] => geheel
)
)
[dimension.type] => Array
(
[0] => SimpleXMLElement Object
(
[0] => hoogte
)
[1] => SimpleXMLElement Object
(
[0] => breedte
)
)
[dimension.value] => Array
(
[0] => SimpleXMLElement Object
(
[0] => 73
)
[1] => SimpleXMLElement Object
(
[0] => 84
)
)
[dimension.unit] => Array
(
[0] => SimpleXMLElement Object
(
[0] => cm
)
[1] => SimpleXMLElement Object
(
[0] => cm
)
)
)
[material] => Array
(
[material.part] => Array
(
[0] => SimpleXMLElement Object
(
[0] => deelmateriaal
)
[1] => SimpleXMLElement Object
(
[0] => deelmateriaal2
)
)
[material_type] => Array
(
[0] => SimpleXMLElement Object
(
[0] => typemateriaal
)
[1] => SimpleXMLElement Object
(
[0] => typemateriaal2
)
)
[material] => Array
(
[0] => SimpleXMLElement Object
(
[0] => materiaal
)
[1] => SimpleXMLElement Object
(
[0] => materiaal2
)
)
[material.notes] => Array
(
[0] => SimpleXMLElement Object
(
[0] => notemateriaal
)
[1] => SimpleXMLElement Object
(
[0] => notemateriaal2
)
)
)
)
And I need to transform it to:
dimensions => Array ( 1 => array(dimension.part => geheel)
=> array (dimension.type => hoogte) )
.....
=> Array ( 2 => array(dimension.part => ...)
=> array (dimension.type => ...) )
....
....
material => Array ( 1 => ...
2 => ...
=> Array ( 1 =>
=>
....
Anyone got a good approach to this?
Thanks,
Joris
foreach($arr['dimension'] as $keyType => $type) {
foreach($type as $key => $value) {
$aNewArray[$key][$keyType] = $value;
}
}
Something like that.. And then process it a bit more to suit your needs..
What it does: walk through every dimension array (and store the key of it in $keyType) and then walk through every item and add it to a new array in the way you want it. It assumes every type has the same amount of items under it.
$new_array = new array();
$count = count($array['dimension']['dimension_part']);
for($i=0;$i<$count;$i++) {
$new_array[$i]['dimension.part'] = $array['dimension']['dimension.part'][$i][0];
$new_array[$i]['dimension.type'] = $array['dimension']['dimension.type'][$i][0];
$new_array[$i]['dimension.value'] = $array['dimension']['dimension.value'][$i][0];
}
I am not quite sure how you access simplexmlobjects, so I used the array type. maybe change it to [$i] -> 0

how do I merge these arrays?

I have this array structure:
Array
(
[0] => Array
(
[0] => Array
(
[timestamp] => 1310394569
[title] => SimpleXMLElement Object
(
[0] => A static tweet here from the static xml
)
[link] => SimpleXMLElement Object
(
[0] => http://www.google.com
)
[type] => SimpleXMLElement Object
(
[0] => static
)
)
)
[1] => Array
(
[0] => Array
(
[timestamp] => 1310117641
[title] => SimpleXMLElement Object
(
)
[link] => SimpleXMLElement Object
(
[0] => http://www.facebook.com/
)
[type] => SimpleXMLElement Object
(
[0] => facebook
)
)
[1] => Array
(
[timestamp] => 1309856547
[title] => SimpleXMLElement Object
(
)
[link] => SimpleXMLElement Object
(
[0] => http://www.facebook.com/
)
[type] => SimpleXMLElement Object
(
[0] => facebook
)
)
But I want to get rid of the outer containing array...so I'm left with this:
Array
(
[0] => Array
(
[timestamp] => 1310394569
[title] => SimpleXMLElement Object
(
[0] => A static tweet here from the static xml
)
[link] => SimpleXMLElement Object
(
[0] => http://www.google.com
)
[type] => SimpleXMLElement Object
(
[0] => static
)
)
[1] => Array
(
[timestamp] => 1310394569
[title] => SimpleXMLElement Object
(
[0] => A static tweet here from the static xml
)
[link] => SimpleXMLElement Object
(
[0] => http://www.google.com
)
[type] => SimpleXMLElement Object
(
[0] => static
)
)
array merge isn't doing anything at all....is there any way to do this?
Your example is a bit unclear, but assuming you want to turn this
array(
array(
array(…)
)
array(
array(…)
)
)
into
array(
array(…)
array(…)
)
this'll do:
$array = array_map('current', $array);
If you want to turn this
array(
array(
array(…)
)
array(
array(…)
array(…)
)
)
into
array(
array(…)
array(…)
array(…)
)
this should do:
$array = array_reduce($array, function ($result, $array) {
return array_merge($result, $array);
}, array());
For multidimensional arrays you have to use array_merge_recursive.

Categories