2012-05-12 82 views
-1

我复制了一些PHP,我写了一段时间回擦洗地址。在原始页面中,它位于实时Web服务器上并且完美运行。当前脚本从我的开发机器上的命令行运行。 CLI的脚本总是抛出“指数没有定义”错误,但该指数定义,从这个代码:PHP中的索引未定义错误?

$url = 'http://production.shippingapis.com/ShippingAPI.dll?API=ZipCodeLookup&XML='; 
$msg = ' 
<ZipCodeLookupRequest USERID="xxxxxxxxxx"> 
<Address ID="0"><FirmName></FirmName><Address1>' . $suite . '</Address1> 
<Address2>' . $street . '</Address2> 
<City>' . $city . '</City><State>' . $state . '</State> 
</Address></ZipCodeLookupRequest> 
'; 

//get the response from the USPS 
$newurl = $url . urlencode($msg); 

// echo $newurl; 

$xml = $newurl; 
$parser = xml_parser_create(); 

// open a file and read data 
$fp  = fopen($xml, 'r'); 
$xmldata = fread($fp, 4096); 

xml_parse_into_struct($parser, $xmldata, $values); 

xml_parser_free($parser); 
//echo $xmldata; 
//print_r($values); 

if ($values[6][tag] === 'ZIP4') { 
    $street = $values[2][value]; 
    $city = $values[3][value]; 
    $state = $values[4][value]; 
    $zip5 = $values[5][value]; 
    $zip4 = $values[6][value]; 
} 
else if ($values[7][tag] === 'ZIP4') { 
    $suite = $values[2][value]; 
    $street = $values[3][value]; 
    $city = $values[4][value]; 
    $state = $values[5][value]; 
    $zip5 = $values[6][value]; 
    $zip4 = $values[7][value]; 
} 
else { 
    $suite = ''; 
    $street = ''; 
    $city = ''; 
    $state = ''; 
    $zip5 = ''; 
    $zip4 = ''; 
} 
; 

if ($values[2][tag] != 'ERROR') { 
    $verifiedBlock = (" 
    $suite . chr(13) . chr(10); 
    $street . chr(13) . chr(10); 
    $city $state $zip5 $zip4 
    "); 
} 
else { 
    $verifiedBlock = (" 
    The address could not be verified 
    "); 
} 
; 

如果我做$值的print_r的,我回来的:

Array ( [0] => Array 
     (
      [tag] => ZIPCODELOOKUPRESPONSE 
      [type] => open 
      [level] => 1 
     ) 

    [1] => Array 
     (
      [tag] => ADDRESS 
      [type] => open 
      [level] => 2 
      [attributes] => Array 
       (
        [ID] => 0 
       ) 

     ) 

    [2] => Array 
     (
      [tag] => ADDRESS1 
      [type] => complete 
      [level] => 3 
      [value] => FL 7 
     ) 

等等 - 我已经证实[6]和[7]总是存在。然而,总是会在这些行和if ($values[2][tag] != 'ERROR')行中引发“索引未定义”错误。

有人可以告诉我我在这里失踪的是什么愚蠢的,明显的东西?

+2

而不是'$ values [2] [tag]'try'$ values [2] ['tag']' – Leri

+0

欢迎来到Stack Overflow!请正确格式化您的代码。通过在任何代码行之前缩进4个空格来插入代码块。我这次为您编写了代码格式,但下次请正确格式化。如需进一步的帮助,请参阅[编辑常见问题](http://stackoverflow.com/editing-help#code) –

回答

1

在你的代码中,我看到$values[2][tag]。在这种情况下tag是不能定义的常量。您的密钥tag是一个字符串,因此您必须将其作为字符串使用,例如$values[2]['tag']。哦,并用其他索引(键)做同样的事情。

+0

@Sarvesh Kumar Singh(当然也有公共小巴) - 完美!我知道这是明显的。这并没有发生在我身上,因为我回收的代码没有引号中的键,这从来都不是问题。非常感谢 - 如果我今天没有得到它,我会开始逐个输入4000多个地址。 – Bendustries

1

将其更改为:

if ($values[2]["tag"] != 'ERROR')