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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.