On Feb 25, 2013, at 7:48 PM, Adam Richardson wrote:

On Mon, Feb 25, 2013 at 8:40 PM, Karl DeSaulniers <k...@designdrumm.com > 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.

Something appears to be amiss, as your array couldn't contain multiple
items with the specialservice key (I'm assuming the second key
'secialservice' is just a typo), as any subsequent assignments would
overwrite the previous value.

Adam

--
Nephtali: A simple, flexible, fast, and security-focused PHP framework
http://nephtaliproject.com


Hi Adam,
Actually you are correct. Sorry to confuse.
Its an XML response from the USPS api I am going through, which I am converting to an array.

Here is the response that I am trying to convert to a multidimensional array.

<?xml version="1.0"?>
<RateV4Response><Package ID="1ST"><ZipOrigination>75287</ ZipOrigination><ZipDestination>87109</ZipDestination><Pounds>70</ Pounds><Ounces>0</Ounces><Container>RECTANGULAR</ Container><Size>LARGE</Size><Width>2</Width><Length>15</ Length><Height>10</Height><Zone>4</Zone><Postage CLASSID="1"><MailService>Priority Mail&lt;sup&gt;&amp;reg;&lt;/ sup&gt;</MailService><Rate>62.95</ Rate><SpecialServices><SpecialService><ServiceID>1</ ServiceID><ServiceName>Insurance</ServiceName><Available>true</ Available><AvailableOnline>true</AvailableOnline><Price>1.95</ Price><PriceOnline>1.95</PriceOnline><DeclaredValueRequired>true</ DeclaredValueRequired><DueSenderRequired>false</DueSenderRequired></ SpecialService><SpecialService><ServiceID>0</ ServiceID><ServiceName>Certified Mail&lt;sup&gt;&amp;reg;&lt;/sup&gt;</ ServiceName><Available>true</Available><AvailableOnline>false</ AvailableOnline><Price>3.10</Price><PriceOnline>0</PriceOnline></ SpecialService><SpecialService><ServiceID>19</ ServiceID><ServiceName>Adult Signature Required</ ServiceName><Available>false</Available><AvailableOnline>true</ AvailableOnline><Price>0</Price><PriceOnline>4.95</PriceOnline></ SpecialService></SpecialServices></Postage></Package><Package ID="2ND"><ZipOrigination>75287</ZipOrigination><ZipDestination>87109</ ZipDestination><Pounds>55</Pounds><Ounces>0</ Ounces><Container>RECTANGULAR</Container><Size>LARGE</Size><Width>2</ Width><Length>15</Length><Height>10</Height><Zone>4</Zone><Postage CLASSID="1"><MailService>Priority Mail&lt;sup&gt;&amp;reg;&lt;/ sup&gt;</MailService><Rate>52.55</ Rate><SpecialServices><SpecialService><ServiceID>1</ ServiceID><ServiceName>Insurance</ServiceName><Available>true</ Available><AvailableOnline>true</AvailableOnline><Price>1.95</ Price><PriceOnline>1.95</PriceOnline><DeclaredValueRequired>true</ DeclaredValueRequired><DueSenderRequired>false</DueSenderRequired></ SpecialService><SpecialService><ServiceID>0</ ServiceID><ServiceName>Certified Mail&lt;sup&gt;&amp;reg;&lt;/sup&gt;</ ServiceName><Available>true</Available><AvailableOnline>false</ AvailableOnline><Price>3.10</Price><PriceOnline>0</PriceOnline></ SpecialService><SpecialService><ServiceID>19</ ServiceID><ServiceName>Adult Signature Required</ ServiceName><Available>false</Available><AvailableOnline>true</ AvailableOnline><Price>0</Price><PriceOnline>4.95</PriceOnline></ SpecialService></SpecialServices></Postage></Package></RateV4Response>

This is my attempt to convert. I thought of setting up a blank array then filling that array with the specialservice arrays

$data = strstr($result, '<?');
// echo '<!-- '. $data. ' -->'; // Uncomment to show XML in comments
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser,XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
xml_parse_into_struct($xml_parser, $result, $vals, $index);
xml_parser_free($xml_parser);
$params = array();
$level = array();
foreach ($vals as $xml_elem) {
    if ($xml_elem['type'] == 'open') {
        if (array_key_exists('attributes',$xml_elem)) {
list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
        } else {
                $level[$xml_elem['level']] = $xml_elem['tag'];
        }
    }
    if ($xml_elem['type'] == 'complete') {
    $start_level = 1;
    $php_stmt = '$params';
    while($start_level < $xml_elem['level']) {
        $php_stmt .= '[$level['.$start_level.']]';
        $start_level++;
    }
    $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
                        
    eval($php_stmt);
    }
}

... then trying to pull data from the results of the $php_stmt


$sid = array();
$numserv = count($params['RATEV4RESPONSE'][''.$p.$ack.''][$cId] ['SPECIALSERVICES']);
if($numserv > 0) {
foreach($params['RATEV4RESPONSE'][''.$p.$ack.''][$cId] ['SPECIALSERVICES']['SPECIALSERVICE'] as $sp_servs) {
                $sid_val = $sp_servs['SERVICEID'];
                if(in_array($sid_val, $sid)) {
                        return;
                } else {
                        if($sp_servs['AVAILABLEONLINE'] == true) {
                                $extracost += $sp_servs['PRICEONLINE'];
                        } else {
                                $extracost += $sp_servs['PRICE'];
                        }
                        $sid[$i] = $sid_val;
                }
        }
}

echo("<br><br>Services Array :<br>");
$num_array_items = count($sid);
for($i=0; $i < $num_array_items; $i++) {
        echo($i.". ".$sid[$i]."<br>");
}

Karl DeSaulniers
Design Drumm
http://designdrumm.com


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to