如何将新元素插入到Usermeta中的现有数组中?

时间:2018-02-11 作者:J. Joe

如何向usermeta中的现有数组插入新元素?此代码不起作用,因为它生成嵌套数组。

$data = array(
get_user_meta(2, \'fruits\', false),
  \'apple\',
  \'pear\',
  \'peach\'
);
update_user_meta(2, \'fruits\', $data , false);
$sud = get_user_meta(2, \'fruits\', false);

echo print_r($sud);

2 个回复
最合适的回答,由SO网友:swissspidy 整理而成

让我们分析一下您的代码及其作用。

假设数据库中存储的当前水果是“菠萝”和“橘子”,get_user_meta(2, \'fruits\', false) 将返回如下内容:

array( array( \'pineapple\', \'orange\' ) )
这是因为你通过了false 作为第三个论点,$single. 函数返回一个数组,如果$singlefalse 以及元数据字段的值,如果$singletrue (docs). 那是因为可能有多个fruits 数据库中的条目,因此如果没有明确告知WordPress不要,WordPress将返回所有条目。

由于您只有一个存储所有水果的元密钥,因此我们不需要所有条目的列表。背景$singletrue 将导致:

array( \'pineapple\', \'orange\' )
让我们将此与您的$data 阵列:

$data = array(
  get_user_meta(2, \'fruits\', false),
  \'apple\',
  \'pear\',
  \'peach\'
);

// results in: array( array( array( \'pineapple\', \'orange\' ) ), \'apple\', \'pear\', peach\' )

$data = array(
  get_user_meta(2, \'fruits\', true),
  \'apple\',
  \'pear\',
  \'peach\'
);

// results in: array( array( \'pineapple\', \'orange\' ), \'apple\', \'pear\', peach\' )
还是不理想!您需要的是一个包含所有水果的单个数组。这意味着您需要合并这些阵列:

$data = array_merge(
  get_user_meta(2, \'fruits\', true),
  array(
    \'apple\',
    \'pear\',
    \'peach\'
  )
);

// results in: array( \'pineapple\', \'orange\', \'apple\', \'pear\', peach\' )
现在,我们终于可以相应地更新用户元了:

update_user_meta(2, \'fruits\', $data , false);
还有一个false 在第四个位置。这是什么意思?这是$prev_value 论点如果指定,该函数仅使用指定的值更新现有元数据条目。否则,它会更新所有条目(docs). 通过false 与不指定任何内容相同。

但如果我们通过了怎么办$prev_value? 让我们看看!

update_user_meta( 2, \'fruits\', $data , array( \'pineapple\', \'orange\' ) );
// does update, because that\'s what\'s in the database.

update_user_meta( 2, \'fruits\', $data );
// does update as well

update_user_meta( 2, \'fruits\', $data , array( \'cherry\', \'banana\' ) );
// does not update, because that\'s not what is in the database.
就你而言,我只需要update_user_meta( 2, \'fruits\', $data ); 因为WordPress会自动将其转换为第三个示例。

让我们再次从数据库中获取更新的数据!记住,您不需要条目数组,所以我们使用get_user_meta( 2, \'fruits\', true )

get_user_meta(2, \'fruits\', false);

// results in array( \'pineapple\', \'orange\', \'apple\', \'pear\', peach\' )
就是这样!

SO网友:Aqib Ashef

try this:

$data = get_user_meta(2, \'fruits\', false);
array_push($data, \'apple\', \'pear\', \'peach\');
update_user_meta(2, \'fruits\', $data , false);
$sud = get_user_meta(2, \'fruits\', false);

echo print_r($sud);
结束