【问题标题】:Get variable from json select option php从json选择选项php获取变量
【发布时间】: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 数组。

标签: php arrays json


【解决方案1】:

我所做的就是将所有值放入选项值中,提交表单,然后在提交后分解值。

        $result = $_POST['address1'];
        $result_explode = explode('|', $result);
        $flatnumber = $result_explode[0];
        $building = $result_explode[1];
        $street = $result_explode[2];


        <form method="post">
            <select name="address1">
        foreach($address as $addresses){
            echo '<option value="'.$addresses['flatNumber'].'|'.$addresses['building'].'|'.$addresses['address1'].'|'.$addresses['knownElectricityMeter'].'|'.$addresses['knownGasMeter'].'">'.$addresses['flatNumber'].' '.$addresses['building'].' '.$addresses['address1'].'</option>';  
        }
            </select>
        </form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2014-05-15
    • 2011-09-22
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多