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