PHP/Wordpress:帮助我理解为什么教程的作者使用array_keys()后跟array_flip()
我正在关注,但一直在努力理解PHP/Wordpress:帮助我理解为什么教程的作者使用array_keys()后跟array_flip(),php,wordpress,Php,Wordpress,我正在关注,但一直在努力理解insert\u row()方法中的一个步骤。以下是完整的方法: // Adds new row to table public function insert_row($data, $type='') { global $wpdb; // set defaults $data = wp_parse_args( $data, $this->get_column_defaults()); do_action('add_pre_i
insert\u row()
方法中的一个步骤。以下是完整的方法:
// Adds new row to table
public function insert_row($data, $type='') {
global $wpdb;
// set defaults
$data = wp_parse_args( $data, $this->get_column_defaults());
do_action('add_pre_insert_' . $type, $data);
// initialise column format array
$column_formats = $this->get_columns();
// force fields to lower case
$data = array_change_key_case($data);
// remove unknown columns
$data = array_intersect_key($data, $column_formats);
// reorder $column_formats to match the order of columns in $data
$data_keys = array_keys($data);
$column_formats = array_merge(array_flip($data_keys), $column_formats);
$wpdb->insert($this->table_name, $data, $column_formats);
do_action('add_post_insert_'.$type, $wpdb->insert_id, $data);
return $wpdb->insert_id;
}
我不明白为什么作者将array\u keys($data)
分配给$data\u keys
,然后在下一行调用array\u flip($data\u keys)
。那里发生了什么
据我所知,$data
和array\u flip($data\u keys)
的键完全相同。虽然array\u flip($data\u key)
的值应该是0,1,2,3,4,…
,但为什么呢?$column\u格式是否会覆盖这些值?好
因此array\u keys
获取数组的键,因此如果您有这个数组
['one'=>'foo', 'two'=>'bar']
您可以从数组键获得以下信息:
[ 0 => 'one', 1=>'two']
现在,如果你把它翻过来
['one' => 0, 'two' => 1]
至于为什么,我不知道。我必须更深入地研究代码,我需要这里使用的一些实际数据
您可以用这段代码测试它(仅供参考,我在脑海中做了第一段):
产出:
array (
'one' => 'foo',
'two' => 'bar',
)array (
0 => 'one',
1 => 'two',
)array (
'one' => 0,
'two' => 1,
)
你可以测试一下
一旦在中添加array\u merge
,现有的任何键都将被替换。现在,如果从概念上讲是我,假设你不想在缺少键的情况下把这些数字放在那里,我会使用array\u fill\u keys
而不是array\u flip
$a=['one'=>'foo', 'two'=>'bar'];
var_export($a);
$a = array_keys($a);
var_export($a);
$a = array_fill_keys($a, '');
var_export($a);
输出
array (
'one' => 'foo',
'two' => 'bar',
)array (
0 => 'one',
1 => 'two',
)array (
'one' => '',
'two' => '',
)
正如您所看到的,最后一个数组的值只有一个空字符串,前面的方法是,如果缺少一个项,则将数字作为剩余值。这样,您将得到一个空字符串作为剩余值
看到了吗
但就像我说的,如果不知道这是基于什么数据,就无法知道他们的意图是什么。我只是在这里“假设”(表明我的观点)他们不使用array\u键
后跟array\u flip
,他们使用array\u键
,后跟array\u merge
,带有array\u flip
。我不知道他们使用什么,但我知道它会做什么。。。
array (
'one' => 'foo',
'two' => 'bar',
)array (
0 => 'one',
1 => 'two',
)array (
'one' => '',
'two' => '',
)