Thursday, April 19, 2012

Is there a better way to iterate over this multi-dimensional array in PHP?

I am using the Solr search engine. It returns my search results like so:



array(2) {
["responseHeader"]=>
array(3) {
["status"]=>
int(0)
["QTime"]=>
int(1)
["params"]=>
array(5) {
["wt"]=>
string(3) "php"
["start"]=>
string(1) "0"
["q"]=>
string(7) "monitor"
["version"]=>
string(3) "2.2"
["rows"]=>
string(2) "10"
}
}
["response"]=>
array(3) {
["numFound"]=>
int(2)
["start"]=>
int(0)
["docs"]=>
array(2) {
[0]=>
array(11) {
["id"]=>
string(6) "VA902B"
["name"]=>
string(49) "ViewSonic VA902B - flat panel display - TFT - 19""
["manu"]=>
string(15) "ViewSonic Corp."
["weight"]=>
float(190.4)
["price"]=>
float(279.95)
["price_c"]=>
string(10) "279.95,USD"
["popularity"]=>
int(6)
["inStock"]=>
bool(true)
["store"]=>
string(18) "45.17614,-93.87341"
["cat"]=>
array(2) {
[0]=>
string(11) "electronics"
[1]=>
string(7) "monitor"
}
["features"]=>
array(1) {
[0]=>
string(75) "19" TFT active matrix LCD, 8ms response time, 1280 x 1024 native resolution"
}
}
[1]=>
array(12) {
["id"]=>
string(7) "3007WFP"
["name"]=>
string(34) "Dell Widescreen UltraSharp 3007WFP"
["manu"]=>
string(10) "Dell, Inc."
["includes"]=>
string(9) "USB cable"
["weight"]=>
float(401.6)
["price"]=>
float(2199)
["price_c"]=>
string(8) "2199,USD"
["popularity"]=>
int(6)
["inStock"]=>
bool(true)
["store"]=>
string(18) "43.17614,-90.57341"
["cat"]=>
array(2) {
[0]=>
string(11) "electronics"
[1]=>
string(7) "monitor"
}
["features"]=>
array(1) {
[0]=>
string(71) "30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast"
}
}
}
}
}


I am capturing this response inside a variable called $results. On my page I am doing a vardump to get each result set like so:



foreach($results['response'] as $result) {
if(is_array($result)) {
foreach($result as $v) {
var_dump($v);
}
}
}


This is the output of that:



array(11) {
["id"]=>
string(6) "VA902B"
["name"]=>
string(49) "ViewSonic VA902B - flat panel display - TFT - 19""
["manu"]=>
string(15) "ViewSonic Corp."
["weight"]=>
float(190.4)
["price"]=>
float(279.95)
["price_c"]=>
string(10) "279.95,USD"
["popularity"]=>
int(6)
["inStock"]=>
bool(true)
["store"]=>
string(18) "45.17614,-93.87341"
["cat"]=>
array(2) {
[0]=>
string(11) "electronics"
[1]=>
string(7) "monitor"
}
["features"]=>
array(1) {
[0]=>
string(75) "19" TFT active matrix LCD, 8ms response time, 1280 x 1024 native resolution"
}
}

array(12) {
["id"]=>
string(7) "3007WFP"
["name"]=>
string(34) "Dell Widescreen UltraSharp 3007WFP"
["manu"]=>
string(10) "Dell, Inc."
["includes"]=>
string(9) "USB cable"
["weight"]=>
float(401.6)
["price"]=>
float(2199)
["price_c"]=>
string(8) "2199,USD"
["popularity"]=>
int(6)
["inStock"]=>
bool(true)
["store"]=>
string(18) "43.17614,-90.57341"
["cat"]=>
array(2) {
[0]=>
string(11) "electronics"
[1]=>
string(7) "monitor"
}
["features"]=>
array(1) {
[0]=>
string(71) "30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast"
}
}


This is exactly what I need but I was wondering if there is a more elegent way to get it than my "nested foreach loop and is array check" approach.





No comments:

Post a Comment