使用带有多维数组的array_push时奇怪的数组布局

时间:2016-08-15 00:48:35

标签: php arrays wordpress multidimensional-array

很抱歉,如果这个问题的代码太多了。阵列占用了大量空间,我试图尽可能彻底地解释这一点。我试图将用户输入的所有地址保存到一个多维数组中,因此我可以轻松地将它们循环到其后。我在理论上试图实现的最终结果如下:

array(3) {[0]=>
array(4) {
    ["street_address"]=>
    string(1) "a"
    ["city_name"]=>
    string(1) "a"
    ["zip"]=>
    string(1) "a"
    ["country_select"]=>
    string(2) "LT"
    }
[1]=>
    array(4) {
    ["street_address"]=>
    string(1) "b"
    ["city_name"]=>
    string(1) "b"
    ["zip"]=>
    string(1) "b"
    ["country_select"]=>
    string(2) "LT"
    }
[2]=>
    array(4) {
    ["street_address"]=>
    string(1) "c"
    ["city_name"]=>
    string(1) "c"
    ["zip"]=>
    string(1) "c"
    ["country_select"]=>
    string(2) "LT"
    }}

我可以使用简单的代码轻松复制这个

$adresai = array();
$adresas =array(
    'street_address' => 'a',
    'city_name' => 'a',
    'zip' => 'a',
    'country_select' => 'a');
array_push($adresai, $adresas);
array_push($adresai, $adresas);
array_push($adresai, $adresas);

但是当我试图在wordpress中应用这个逻辑时,我得到了非常奇怪的布局,基本上是一团糟。

array(1) {
          [0]=>
             array(2) {
                  [0]=>
                     array(2) {
                          [0]=>
                               array(4) {
    ["street_address"]=>
    string(1) "a"
    ["city_name"]=>
    string(1) "a"
    ["zip"]=>
    string(1) "a"
    ["country_select"]=>
    string(2) "LT"
  }
  [1]=>
  array(4) {
    ["street_address"]=>
    string(1) "b"
    ["city_name"]=>
    string(1) "b"
    ["zip"]=>
    string(1) "b"
    ["country_select"]=>
    string(2) "LT"
  }
}
[1]=>
array(4) {
  ["street_address"]=>
  string(1) "c"
  ["city_name"]=>
  string(1) "c"
  ["zip"]=>
  string(1) "c"
  ["country_select"]=>
  string(2) "LT"
}}}

我保存用户输入的地址并与以前的地址合并的代码段:

$adresai =get_user_meta(get_current_user_id(), 'stakliu_adresai');

$adresas =array(
    'street_address' => $_POST['snr_gatve'],
    'city_name' => $_POST['snr_miestas'],
    'zip' => $_POST['snr_pastokodas'],
    'country_select' => $_POST['snr_salis']);

if ($adresai == array()){

    $adresai = $adresas;
}
else{
    array_push($adresai, $adresas);
}

update_user_meta(get_current_user_id(),'stakliu_adresai', $adresai );

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我想说你的部分问题在于:

if ($adresai == array()) {
    $adresai = $adresas;
}else ...

您计划存储多个地址。一组数组。如果该值不存在,则只需将其设置为数组,而不是将其添加到数组中。因为如果没有设置任何内容,你期望一个空数组,你可以简单地推送,如下所示:

$adresai =get_user_meta(get_current_user_id(), 'stakliu_adresai');

$adresas = array(
    'street_address' => $_POST['snr_gatve'],
    'city_name' => $_POST['snr_miestas'],
    'zip' => $_POST['snr_pastokodas'],
    'country_select' => $_POST['snr_salis']
);

//if the array is empty, this address will become the first value
//if the array is not empty, this address will be added to the array
array_push($adresai, $adresas);

//save
update_user_meta(get_current_user_id(),'stakliu_adresai', $adresai );

答案 1 :(得分:0)

因此,当naththedeveloper建议时,我添加了参数$ single = true,它返回元值而没有额外的数组"包装"。但是当尚未设置meta时,函数返回一个空字符串。为了避免错误,我仍然必须使用条件语句。我终于得到了它的工作:

$adresai = get_user_meta(get_current_user_id(), 'stakliu_adresai', true);
$adresas = array(
    'street_address' => $_POST['snr_gatve'],
    'city_name' => $_POST['snr_miestas'],
    'zip' => $_POST['snr_pastokodas'],
    'country_select' => $_POST['snr_salis']);

// checking if value was not set earlier
if ($adresai == ''){

    $adresai = array();
}
    array_push($adresai, $adresas);

update_user_meta(get_current_user_id(),'stakliu_adresai', $adresai );