Re: Arrays

From: Date: Wed, 27 Feb 2013 05:23:45 +0000
Subject: Re: Arrays
References: 1 2 3 4  Groups: php.general 
Request: Send a blank email to php-general+get-320312@lists.php.net to get a copy of this message
On Feb 26, 2013, at 10:35 PM, tamouse mailing lists wrote:
On Mon, Feb 25, 2013 at 9:51 PM, Karl DeSaulniers <karl@designdrumm.comwrote:
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 -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Would this work for you? http://us.php.net/manual/en/function.xml-parse-into-struct.php
That is where I got this function. :) Comment 12 and 13 on that page. Yes it worked for me. Best, Karl DeSaulniers Design Drumm http://designdrumm.com

« previous php.general (#320312) next »