Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/Wordpress:帮助我理解为什么教程的作者使用array_keys()后跟array_flip()_Php_Wordpress - Fatal编程技术网

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' => '',
)