Re: [PHP] Arrays
[email protected] (Karl DeSaulniers)
| Newsgroups | php.general |
|---|---|
| Message-ID | <[email protected]> |
Never mind. I found a different function that reads out the children
as well into the array.
function xml_parse_into_assoc($data) {
$p = xml_parser_create();
xml_parser_set_option($p, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($p, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($p, $data, $vals, $index);
xml_parser_free($p);
$levels = array(null);
foreach ($vals as $val) {
if ($val['type'] == 'open' || $val['type'] == 'complete') {
if (!array_key_exists($val['level'], $levels)) {
$levels[$val['level']] = array();
}
}
$prevLevel =& $levels[$val['level'] - 1];
$parent = $prevLevel[sizeof($prevLevel)-1];
if ($val['type'] == 'open') {
$val['children'] = array();
array_push(&$levels[$val['level']], $val);
continue;
}
else if ($val['type'] == 'complete') {
$parent['children'][$val['tag']] = $val['value'];
}
else if ($val['type'] == 'close') {
$pop = array_pop($levels[$val['level']]);
$tag = $pop['tag'];
if ($parent) {
if (!array_key_exists($tag, $parent['children'])) {
$parent['children'][$tag] = $pop['children'];
}
else if (is_array($parent['children'][$tag])) {
if(!isset($parent['children'][$tag][0])) {
$oldSingle = $parent['children'][$tag];
$parent['children'][$tag] = null;
$parent['children'][$tag][] = $oldSingle;
}
$parent['children'][$tag][] = $pop['children'];
}
}
else {
return(array($pop['tag'] => $pop['children']));
}
}
$prevLevel[sizeof($prevLevel)-1] = $parent;
}
}
$params = xml_parse_into_assoc($result);//$result = xml result from
USPS api
Original function by: jemptymethod at gmail dot com
Duplicate names fix by: Anonymous (comment right above original
function)
Best,
Karl
On Feb 25, 2013, at 7:50 PM, Jim Lucas wrote:
> On 02/25/2013 05:40 PM, Karl DeSaulniers wrote:
>> Hi Guys/Gals,
>> If I have an multidimensional array and it has items that have the
>> same
>> name in it, how do I get the values of each similar item?
>>
>> EG:
>>
>> specialservices => array(
>> specialservice => array(
>> serviceid => 1,
>> servicename=> signature required,
>> price => $4.95
>> ),
>> secialservice => array(
>> serviceid => 15,
>> servicename => return receipt,
>> price => $2.30
>> )
>> )
>>
>> How do I get the prices for each? What would be the best way to do
>> this?
>> Can I utilize the serviceid to do this somehow?
>> It is always going to be different per specialservice.
>>
>> TIA,
>>
>> Best,
>>
>> Karl DeSaulniers
>> Design Drumm
>> http://designdrumm.com
>>
>>
>
> This will never work. Your last array will always overwrite your
> previous array.
>
> Here is how I would suggest building it:
>
>
> $items = array(
> 1 => array(
> serviceid => 1,
> servicename=> signature required,
> price => $4.95
> ),
> 15 => array(
> serviceid => 15,
> servicename => return receipt,
> price => $2.30
> )
> )
>
> This will ensure that your first level indexes never overwrite
> themselves.
>
> But, with that change made, then do this:
>
> foreach ( $items AS $item ) {
> if ( array_key_exists('price', $item) ) {
> echo $item['price'];
> } else {
> echo 'Item does not have a price set';
> }
> }
>
> Resources:
> http://php.net/foreach
> http://php.net/array_key_exists
>
> --
> Jim Lucas
>
> http://www.cmsws.com/
> http://www.cmsws.com/examples/
Karl DeSaulniers
Design Drumm
http://designdrumm.com