【问题标题】:Strange array layout while using array_push with multidimensional arrays将 array_push 与多维数组一起使用时出现奇怪的数组布局
【发布时间】:2016-12-21 05:43:39
【问题描述】:

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

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"
}}}

我的 sn-p 用于保存用户输入的地址并与以前的地址合并:

$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 );

我做错了什么?

【问题讨论】:

  • 所以这只发生在 wordpress 中?
  • 请注意文档中的这一点:如果未指定 $key 或 $single 为 false,则将是一个数组。如果 $single 为真,将是 meta_value 字段的值。 所以,尝试更改 get_user_meta,如下所示:get_user_meta(get_current_user_id(), 'stakliu_adresai', true);
  • @naththedeveloper,谢谢!我总是忘记这一点。

标签: php arrays wordpress multidimensional-array


【解决方案1】:

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

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 );

【讨论】:

  • 同意if 不正确,但这不是问题的原因。
【解决方案2】:

所以按照 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 );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2020-10-08
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多