【发布时间】:2015-11-12 14:48:27
【问题描述】:
我在 php 中有一个带有 foreach 的 JSON 解码数组,每次我从这个下拉列表中选择一个选项时,它都会在表单中包含一个选择选项,它会返回列表中的最后一个值。我正在尝试保存 flatnumber、building、address1 变量。我该怎么办?
$api_url = 'http://rest.api?postcode=' . urlencode($_GET['postcode']);
$api_json = file_get_contents($api_url);
$api_array = json_decode($api_json, true);
$address = $api_array['addresses'];
foreach($address as $addresses){
echo '<option>'.$addresses['address'].'</option>';
$flatnumber = $addresses['flatNumber'];
$address1 = $addresses['building'];
$address2 = $addresses['address1'];
$town = $addresses['town'];
$county = $addresses['county'];
}
这是数组:
Array ( [links] => Array ( [0] => Array ( [queries] => Array ( [0] => Array ( [name] => searchByPostcode [parameters] => Array ( [0] => Array ( [data] => GL50 2Tj [name] => postcode [validateAs] => /validate/ukPostcode ) ) ) ) [rel] => /rels/domestic/address-lookup /rels/self [uri] => http://?b=2jmj7l5rSw0yVb_vlWAYkK_YBwk{&postcode} ) [1] => Array ( [rel] => /rels/home [uri] => http:// ) ) [addresses] => Array ( [0] => Array ( [address] => 22, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [address1] => Andover Road [building] => 22 [county] => Gloucestershire [deliveryPointSuffix] => 1A [dependentLocality] => [dependentThorofare] => [doubleDependentLocality] => [flatNumber] => [houseName] => [houseNumber] => 22 [id] => |22||Andover Road||CHELTENHAM|Gloucestershire|GL50 2TJ|22|||1Al|ElecM|NoGasM|NoIGT| [igtWarning] => Unknown [knownElectricityMeter] => 1 [knownGasMeter] => [name] => 22, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [postCode] => GL50 2TJ [town] => CHELTENHAM ) [1] => Array ( [address] => 24, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [address1] => Andover Road [building] => 24 [county] => Gloucestershire [deliveryPointSuffix] => 1L [dependentLocality] => [dependentThorofare] => [doubleDependentLocality] => [flatNumber] => [houseName] => [houseNumber] => 24 [id] => |24||Andover Road||CHELTENHAM|Gloucestershire|GL50 2TJ|24|||1Lw|ElecM|GasM|NoIGT| [igtWarning] => NoIGT [knownElectricityMeter] => 1 [knownGasMeter] => 1 [name] => 24, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [postCode] => GL50 2TJ [town] => CHELTENHAM ) [2] => Array ( [address] => Flat Above, 24-26, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [address1] => Andover Road [building] => 24-26 [county] => Gloucestershire [deliveryPointSuffix] => [dependentLocality] => [dependentThorofare] => [doubleDependentLocality] => [flatNumber] => Flat Above [houseName] => [houseNumber] => 24-26 [id] => Flat Above|24-26||Andover Road||CHELTENHAM|Gloucestershire|GL50 2TJ|24-26||||ElecM|NoGasM|NoIGT| [igtWarning] => Unknown [knownElectricityMeter] => 1 [knownGasMeter] => [name] => Flat Above, 24-26, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [postCode] => GL50 2TJ [town] => CHELTENHAM ) [3] => Array ( [address] => 24-26, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [address1] => Andover Road [building] => 24-26 [county] => Gloucestershire [deliveryPointSuffix] => 1B [dependentLocality] => [dependentThorofare] => [doubleDependentLocality] => [flatNumber] => [houseName] => [houseNumber] => 24-26 [id] => |24-26||Andover Road||CHELTENHAM|Gloucestershire|GL50 2TJ|24-26|||1Bm|ElecM|NoGasM|NoIGT| [igtWarning] => Unknown [knownElectricityMeter] => 1 [knownGasMeter] => [name] => 24-26, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [postCode] => GL50 2TJ [town] => CHELTENHAM ) [4] => Array ( [address] => 26, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [address1] => Andover Road [building] => 26 [county] => Gloucestershire [deliveryPointSuffix] => 1N [dependentLocality] => [dependentThorofare] => [doubleDependentLocality] => [flatNumber] => [houseName] => [houseNumber] => 26 [id] => |26||Andover Road||CHELTENHAM|Gloucestershire|GL50 2TJ|26|||1Ny|NoElecM|GasM|NoIGT| [igtWarning] => NoIGT [knownElectricityMeter] => [knownGasMeter] => 1 [name] => 26, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [postCode] => GL50 2TJ [town] => CHELTENHAM ) [5] => Array ( [address] => 28, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [address1] => Andover Road [building] => 28 [county] => Gloucestershire [deliveryPointSuffix] => 1E [dependentLocality] => [dependentThorofare] => [doubleDependentLocality] => [flatNumber] => [houseName] => [houseNumber] => 28 [id] => |28||Andover Road||CHELTENHAM|Gloucestershire|GL50 2TJ|28|||1Ep|ElecM|NoGasM|NoIGT| [igtWarning] => Unknown [knownElectricityMeter] => 1 [knownGasMeter] => [name] => 28, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [postCode] => GL50 2TJ [town] => CHELTENHAM ) [6] => Array ( [address] => 30, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [address1] => Andover Road [building] => 30 [county] => Gloucestershire [deliveryPointSuffix] => 1F [dependentLocality] => [dependentThorofare] => [doubleDependentLocality] => [flatNumber] => [houseName] => [houseNumber] => 30 [id] => |30||Andover Road||CHELTENHAM|Gloucestershire|GL50 2TJ|30|||1Fq|ElecM|GasM|NoIGT| [igtWarning] => NoIGT [knownElectricityMeter] => 1 [knownGasMeter] => 1 [name] => 30, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [postCode] => GL50 2TJ [town] => CHELTENHAM ) [7] => Array ( [address] => 32, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [address1] => Andover Road [building] => 32 [county] => Gloucestershire [deliveryPointSuffix] => 1G [dependentLocality] => [dependentThorofare] => [doubleDependentLocality] => [flatNumber] => [houseName] => [houseNumber] => 32 [id] => |32||Andover Road||CHELTENHAM|Gloucestershire|GL50 2TJ|32|||1Gr|ElecM|GasM|NoIGT| [igtWarning] => NoIGT [knownElectricityMeter] => 1 [knownGasMeter] => 1 [name] => 32, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [postCode] => GL50 2TJ [town] => CHELTENHAM ) [8] => Array ( [address] => Phoenix Inn, 36, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [address1] => Andover Road [building] => 36 [county] => Gloucestershire [deliveryPointSuffix] => [dependentLocality] => [dependentThorofare] => [doubleDependentLocality] => [flatNumber] => Phoenix Inn [houseName] => [houseNumber] => 36 [id] => Phoenix Inn|36||Andover Road||CHELTENHAM|Gloucestershire|GL50 2TJ|36||||NoElecM|GasM|NoIGT| [igtWarning] => NoIGT [knownElectricityMeter] => [knownGasMeter] => 1 [name] => Phoenix Inn, 36, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [postCode] => GL50 2TJ [town] => CHELTENHAM ) [9] => Array ( [address] => 36, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [address1] => Andover Road [building] => 36 [county] => Gloucestershire [deliveryPointSuffix] => 1P [dependentLocality] => [dependentThorofare] => [doubleDependentLocality] => [flatNumber] => [houseName] => [houseNumber] => 36 [id] => |36||Andover Road||CHELTENHAM|Gloucestershire|GL50 2TJ|36|||1P0|ElecM|NoGasM|NoIGT| [igtWarning] => Unknown [knownElectricityMeter] => 1 [knownGasMeter] => [name] => 36, Andover Road, CHELTENHAM, Gloucestershire, GL50 2TJ [postCode] => GL50 2TJ [town] => CHELTENHAM ) ) )
【问题讨论】:
-
实际上变量的值被覆盖了。您必须创建数组来存储所有值,或者您可以在
foreach中回显它们 -
我有一个结果数组,我刚刚更新了代码,问题是每次都选择最后一个结果
-
你实际上不只是每次都覆盖这些值。您需要创建一个数组并在每次迭代结束时将值推入其中,如果您想存储所有这些值,而不是最后一个。简单解释一下,$flatnumber 第一次是 i.e. = 1,但第 10 次是 = 10,这是因为值只是分配而不是存储。
-
我的 json_decode 不是在创建数组吗?
-
@scsitim 是的,您可以使用由
json_decode解码的数组。请发布您的 Json 数组。