通过匹配第二个数组的键ID和第一个数组的键ID来查找第二个数组的键类型

时间:2015-11-14 08:43:26

标签: php arrays wordpress

也许我的问题类型不太清楚,但我不知道更好的方式来解释我需要什么。这是我在WordPress中的一些自定义页面上工作的东西,我在数组中有输入字段。该数组中的输入字段与第二个数组的id匹配,但实际上我需要获取第二个数组的类型字段,该字段与第一个数组的id匹配。

这是第一个数组

的示例
$first_array = array(
  'sample_text' => 'some text here',
  'sample_textarea' => 'some text here in textarea field',
  'sample_upload' => 'http://somelink.com/someimage.jpg'
);

这是第二个阵列。

$second_array = array(
   array(
     'type' => 'upload',
     'id' => 'sample_upload',
     'title' => 'Sample upload button'
   ),

   array(
      'type' => 'textfield',
      'id' => 'sample_text',
      'title' => 'Sample text field'
   ),

   array(
      'type' => 'textarea',
      'id' => 'sample_textarea',
      'title' => 'Sample textarea field'
   ),
);

所以基本上第二个数组首先用于在前端生成输入字段,但是在表单提交时,表单提交了一个看起来像第一个示例的数组,所以现在在第一个数组上我需要为每个输入循环并匹配第二个和第一个数组的id,但是当id匹配时,我需要获取type字段并应用具有该类型字段名称的过滤器。

所以基本上

// loop through inputs in the array
foreach( $first_array as $key => $value ) {

    // Now the first $key would be 'sample_text'

    // How to search $second_array for 'id' with 'sample_text'

    // And if that 'id' exists, take the 'type' field and apply filter named same as that 'type' field

}

但我不确切知道如何循环第二个数组并根据'id'获得'type'

2 个答案:

答案 0 :(得分:1)

我会向第二个数组添加有用的键,如下所示:

$second_array = array(
   'sample_upload' => array(
     'type' => 'upload',
     'id' => 'sample_upload',
     'title' => 'Sample upload button'
   ),
   'sample_text' => array(
      'type' => 'textfield',
      'id' => 'sample_text',
      'title' => 'Sample text field'
   ),
   'sample_textarea' => array(
      'type' => 'textarea',
      'id' => 'sample_textarea',
      'title' => 'Sample textarea field'
   ),
);

循环遍历第一个数组时,可以使用已知密钥访问第二个数组。

foreach ($first_array as $key => $value) {
    $sa = $second_array[$key];
}

那个循环通常会有更多的错误检查代码,例如确保密钥存在,为简洁起见,遗漏了密钥。

答案 1 :(得分:0)

编辑:array_filter()将无法正常使用,因此您可以使用以下内容

function checkKey($item, $k, $key) {
    return $item['id'] === $key;
}

foreach( $first_array as $key => $value ) {
    // Now the first $key would be 'sample_text'
    // How to search $second_array for 'id' with 'sample_text'
    $sa = $second_array[array_walk($second_array, 'checkKey', $key)];
    // And if that 'id' exists, take the 'type' field and apply filter named same as that 'type' field
}