2014-01-25 3 views
0

У меня возникла проблема с функцией, которую я получил где-то в сети, проблема заключается в том, что функция должна возвращать определенное значение в массиве, но всякий раз, когда я повторяю функцию, она дает мне большой массив в стиле print_r ! вот код: -Как повторить определенное значение в массиве?

function USPSParcelRate() { 

$userName = 'XXXXXXXXXXX'; 
$orig_zip = '10459'; 

//Shipping Request 
$dest_zip = getshipinfo('zip_code'); 
foreach($_SESSION as $name=> $value){ 
     if($value>0){ 
      if(substr($name, 0, 5)=='cart_'){ 
    if(substr($name, 0, 5)=='cart_'){ 
    $id=substr($name, 5, (strlen($name)-5)); 
    $query = mysql_query("SELECT `category`,`subcategory` FROM `items` WHERE `id`='".mysql_real_escape_string((int)$id)."' "); 
    while($query_row = mysql_fetch_assoc($query)){ 
     $category = $query_row['category']; 
     $subcategory = $query_row['subcategory']; 
    } 
    $sql = mysql_query("SELECT `pounds`,`ounces` FROM `categories` WHERE `category`='".$category."' AND `subcategory`='".$subcategory."' "); 
      while($sql_row = mysql_fetch_assoc($sql)){ 
       $pounds = $sql_row['pounds']; 
       $ounces = $sql_row['ounces']; 
      } 
     } 
    } 
} 
} 
$url = "http://production.shippingapis.com/shippingapi.dll"; 
$ch = curl_init(); 

// set the target url 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 

// parameters to post 
curl_setopt($ch, CURLOPT_POST, 1); 
$data = "API=RateV4&XML=http://production.shippingapis.com/shippingapi.dll=<RateV4Request USERID='151ALHAD4911' > 
    <Revision/> 
    <Package ID='1ST'> 
      <Service>PRIORITY</Service> 
      <ZipOrigination>$orig_zip</ZipOrigination> 
      <ZipDestination>$dest_zip</ZipDestination> 
      <Pounds>$pounds</Pounds> 
      <Ounces>$ounces</Ounces> 
      <Container>NONRECTANGULAR</Container> 
      <Size>LARGE</Size> 
      <Width>12</Width> 
      <Length>15.5</Length> 
      <Height>6</Height> 
      <Girth>31</Girth> 
    </Package> 
</RateV4Request>"; 

// send the POST values to USPS 
curl_setopt($ch, CURLOPT_POSTFIELDS,$data); 

$result=curl_exec ($ch); 
$data = strstr($result, '<?'); 
// echo '<!-- '. $data. ' -->'; // Uncomment to show XML in comments 
$xml_parser = xml_parser_create(); 
xml_parse_into_struct($xml_parser, $data, $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); 
    } 
} 
curl_close($ch); 
//echo '<pre>'; print_r($params); echo'</pre>'; // Uncomment to see xml tags 
return $params['RateV4Response']['1ST']['1']['RATE']; 

} 

echo USPSParcelRate(); 

этот код не дает мне никаких результатов, если я не раскомментируйте print_r линии, и он показывает это так: -

Array 
(
    [RATEV4RESPONSE] => Array 
     (
      [1ST] => Array 
       (
        [ZIPORIGINATION] => XXXXX 
        [ZIPDESTINATION] => XXXXX 
        [POUNDS] => 3 
        [OUNCES] => 5 
        [CONTAINER] => NONRECTANGULAR 
        [SIZE] => LARGE 
        [WIDTH] => 12 
        [LENGTH] => 16 
        [HEIGHT] => 6 
        [GIRTH] => 31 
        [ZONE] => 5 
        [1] => Array 
         (
          [MAILSERVICE] => Priority Mail 3-Day<sup>™</sup> 
          [RATE] => 14.05 
         ) 

       ) 

     ) 

) 

как я могу повторить значение эта линия только: -

[RATE] => 14.05 

ответ

0

массива ключей чувствительны к регистру, поэтому ...

return $params['RATEV4RESPONSE']['1ST'][1]['RATE']; 

Должно это сделать

+0

Большое вам спасибо, это действительно сэкономило мое время. да благословит тебя Бог. если я также хочу повторить [MAILSERVICE] => Priority Mail 3-Day , как я могу это сделать? – user2869402

+0

Почти то же самое: 'return $ params ['RATEV4RESPONSE'] ['1ST'] [1] ['MAILSERVICE']' – Clive

+0

@ user2869402 Измените '['RATE']' на '['MAILSERVICE']'. – h2ooooooo

Смежные вопросы