Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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数组中提取数据_Php_Arrays_Wordpress_Loops - Fatal编程技术网

从PHP数组中提取数据

从PHP数组中提取数据,php,arrays,wordpress,loops,Php,Arrays,Wordpress,Loops,问题。 我有一个Wordpress高级自定义字段数据数组,我使用SQL将其从数据库拉入PHP数组 $wp_postmeta = array( array('meta_id' => '3784','post_id' => '180','meta_key' => 'press_0_title','meta_value' => 'The first title'), // Want array('meta_id' => '3785','post_id' =>

问题。

我有一个Wordpress高级自定义字段数据数组,我使用SQL将其从数据库拉入PHP数组

$wp_postmeta = array(
  array('meta_id' => '3784','post_id' => '180','meta_key' => 'press_0_title','meta_value' => 'The first title'), // Want 
  array('meta_id' => '3785','post_id' => '180','meta_key' => '_press_0_title','meta_value' => 'field_52d67eb94ac55'), // Dont want 
  array('meta_id' => '3786','post_id' => '180','meta_key' => 'press_0_date','meta_value' => 'November-17'), // Want
  array('meta_id' => '3787','post_id' => '180','meta_key' => '_press_0_date','meta_value' => 'field_52d67f094ac58'), // Dont want
  array('meta_id' => '3837','post_id' => '180','meta_key' => 'press_1_title','meta_value' => 'The second title'), // Want
  array('meta_id' => '3830','post_id' => '180','meta_key' => '_press_1_title','meta_value' => 'field_52d67eb94ac55'), // Dont want
  array('meta_id' => '3839','post_id' => '180','meta_key' => 'press_1_date','meta_value' => 'October-17'), // Want 
  array('meta_id' => '3832','post_id' => '180','meta_key' => '_press_1_date','meta_value' => 'field_52d67f094ac58') // Dont want
);
它们包括完整的标题和日期值,但被分成单独的数组,我需要将其下拉到相应的组中,例如,从press_0_、press_1_等中获得的日期和标题,正如您在下面的解决方案中所看到的,它返回按我需要格式化的数据

我的解决方案

// This is the array I need to pull the data from.

$wp_postmeta = array(
  array('meta_id' => '3784','post_id' => '180','meta_key' => 'press_0_title','meta_value' => 'The first title'), // Want 
  array('meta_id' => '3785','post_id' => '180','meta_key' => '_press_0_title','meta_value' => 'field_52d67eb94ac55'), // Dont want 
  array('meta_id' => '3786','post_id' => '180','meta_key' => 'press_0_date','meta_value' => 'November-17'), // Want
  array('meta_id' => '3787','post_id' => '180','meta_key' => '_press_0_date','meta_value' => 'field_52d67f094ac58'), // Dont want
  array('meta_id' => '3837','post_id' => '180','meta_key' => 'press_1_title','meta_value' => 'The second title'), // Want
  array('meta_id' => '3830','post_id' => '180','meta_key' => '_press_1_title','meta_value' => 'field_52d67eb94ac55'), // Dont want
  array('meta_id' => '3839','post_id' => '180','meta_key' => 'press_1_date','meta_value' => 'October-17'), // Want 
  array('meta_id' => '3832','post_id' => '180','meta_key' => '_press_1_date','meta_value' => 'field_52d67f094ac58') // Dont want
);

// These are the loops I have run to pull the data.

$counter = 0;
$keys = [];

foreach ($wp_postmeta as $meta) {
  $titleKey = 'press_'.$counter.'_title';
  $dateKey = 'press_'.$counter.'_date';

  $key = [];

  $key['title-key'] = $titleKey;
  $key['date-key'] = $dateKey;

  array_push($keys, $key);

  $counter++;
}

foreach ($keys as $key) {
  $titleKey = $key['title-key'];
  $title;
  $dateKey = $key['date-key'];
  $date;

  foreach ($wp_postmeta as $meta) {
    if ($meta['meta_key'] == $titleKey) {
      $title = $meta['meta_value'];
    }

    if ($meta['meta_key'] == $dateKey) {
      $date = $meta['meta_value'];
    }
  }

  // This is the data I want from the array.

  echo 'title - ' . $title . '<br>';
  echo 'date - ' . $date  . '<br>';
}

// This returns

title - The first title
date - November-17

title - The second title
date - October-17
//这是我需要从中提取数据的数组。
$wp_postemta=数组(
数组('meta_id'=>'3784','post_id'=>'180','meta_key'=>'press_0_title','meta_value'=>'first title'),//想要
数组('meta_id'=>'3785'、'post_id'=>'180'、'meta_key'=>'、'meta_value'=>'field_52d67eb94ac55'),//不需要
数组('meta_id'=>'3786','post_id'=>'180','meta_key'=>'press_0_date','meta_value'=>'11月17日'),//想要
数组('meta_id'=>'3787'、'post_id'=>'180'、'meta_key'=>'、'meta_value'=>'field_52d67f094ac58'),//不需要
数组('meta_id'=>'3837','post_id'=>'180','meta_key'=>'press_1_title','meta_value'=>'第二个title'),//想要
数组('meta_id'=>'3830'、'post_id'=>'180'、'meta_key'=>'、'meta_value'=>'field_52d67eb94ac55'),//不需要
数组('meta_id'=>'3839','post_id'=>'180','meta_key'=>'press_1_date','meta_value'=>'10月17日'),//想要
数组('meta_id'=>'3832'、'post_id'=>'180'、'meta_key'=>'、'meta_value'=>'字段\u 52d67f094ac58')//不需要
);
//这些是我用来提取数据的循环。
$counter=0;
$keys=[];
foreach($wp_Posteta作为$meta){
$titleKey='按“.$counter.”“标题”;
$dateKey='按'。$counter.''日期';
$key=[];
$key['title-key']=$titleKey;
$key['date-key']=$dateKey;
数组_push($key,$key);
$counter++;
}
foreach($key作为$key){
$titleKey=$key['title-key'];
$title;
$dateKey=$key['date-key'];
$date;
foreach($wp_Posteta作为$meta){
如果($meta['meta_key']==$titleKey){
$title=$meta['meta_value'];
}
如果($meta['meta_key']==$dateKey){
$date=$meta['meta_value'];
}
}
//这是我想要从数组中获取的数据。
回显“title-”.$title.“
”; 回显“日期-”.$date.“
”; } //这是回报 标题-第一个标题 日期-11月17日 标题-第二个标题 日期-十月十七日
我的问题

// This is the array I need to pull the data from.

$wp_postmeta = array(
  array('meta_id' => '3784','post_id' => '180','meta_key' => 'press_0_title','meta_value' => 'The first title'), // Want 
  array('meta_id' => '3785','post_id' => '180','meta_key' => '_press_0_title','meta_value' => 'field_52d67eb94ac55'), // Dont want 
  array('meta_id' => '3786','post_id' => '180','meta_key' => 'press_0_date','meta_value' => 'November-17'), // Want
  array('meta_id' => '3787','post_id' => '180','meta_key' => '_press_0_date','meta_value' => 'field_52d67f094ac58'), // Dont want
  array('meta_id' => '3837','post_id' => '180','meta_key' => 'press_1_title','meta_value' => 'The second title'), // Want
  array('meta_id' => '3830','post_id' => '180','meta_key' => '_press_1_title','meta_value' => 'field_52d67eb94ac55'), // Dont want
  array('meta_id' => '3839','post_id' => '180','meta_key' => 'press_1_date','meta_value' => 'October-17'), // Want 
  array('meta_id' => '3832','post_id' => '180','meta_key' => '_press_1_date','meta_value' => 'field_52d67f094ac58') // Dont want
);

// These are the loops I have run to pull the data.

$counter = 0;
$keys = [];

foreach ($wp_postmeta as $meta) {
  $titleKey = 'press_'.$counter.'_title';
  $dateKey = 'press_'.$counter.'_date';

  $key = [];

  $key['title-key'] = $titleKey;
  $key['date-key'] = $dateKey;

  array_push($keys, $key);

  $counter++;
}

foreach ($keys as $key) {
  $titleKey = $key['title-key'];
  $title;
  $dateKey = $key['date-key'];
  $date;

  foreach ($wp_postmeta as $meta) {
    if ($meta['meta_key'] == $titleKey) {
      $title = $meta['meta_value'];
    }

    if ($meta['meta_key'] == $dateKey) {
      $date = $meta['meta_value'];
    }
  }

  // This is the data I want from the array.

  echo 'title - ' . $title . '<br>';
  echo 'date - ' . $date  . '<br>';
}

// This returns

title - The first title
date - November-17

title - The second title
date - October-17
我能做些什么改进来重构它使它更干净吗?如果可能的话,这将极大地提高我的PHP知识。

您可以使用OptionalIndex\u键在输入数组中获取一列

这样试试

    $wp_postmeta_info = array_column($wp_postmeta, 'meta_value', 'meta_key');
    for($i = 0; $i < count($wp_postmeta_info); $i++ ){
       if(!isset($wp_postmeta_info['press_'.$i.'_title'])){
            continue;
        }
        $data[] = ['title' => $wp_postmeta_info['press_'.$i.'_title'], 'date' => $wp_postmeta_info['press_'.$i.'_date']];
    }
    return $data;
$wp_postmeta_info=array_column($wp_postmeta,'meta_value','meta_key');
对于($i=0;$i$wp_邮递信息['press_.$i.'U title'],'date'=>$wp_邮递信息['press_.$i.'U date'];
}
返回$data;
您可以使用OptionalIndex\u键获取输入数组中的单个列

这样试试

    $wp_postmeta_info = array_column($wp_postmeta, 'meta_value', 'meta_key');
    for($i = 0; $i < count($wp_postmeta_info); $i++ ){
       if(!isset($wp_postmeta_info['press_'.$i.'_title'])){
            continue;
        }
        $data[] = ['title' => $wp_postmeta_info['press_'.$i.'_title'], 'date' => $wp_postmeta_info['press_'.$i.'_date']];
    }
    return $data;
$wp_postmeta_info=array_column($wp_postmeta,'meta_value','meta_key');
对于($i=0;$i$wp_邮递信息['press_.$i.'U title'],'date'=>$wp_邮递信息['press_.$i.'U date'];
}
返回$data;

pos此处与主题无关,最好是codereview SEnote to flag reviewer-应该在代码审查中-但选项“应该在另一个SE上”不包括它-我尽了最大努力选择最佳标志您可以使用
array_filter
和函数检查来开始,如果
meta_键以“uu”开头,这名男子有两个拇指,有一个非常,很好的理由是它没有列在那里。@Mast哪个是?这里的pos与主题无关,最好是codereview SEnote to flag review-应该是code review-但是选项“应该在另一个SE上”不包括它-我尽了最大努力选择最好的flag你可以通过使用
数组过滤器
和函数检查开始,如果
meta_键
以“u”开头,这个人有两个大拇指,很好的理由是它没有列在那里。@Mast哪个是?正是我想要的。谢谢你!正是我想要的。谢谢你!