从PHP数组中提取数据
问题。 我有一个Wordpress高级自定义字段数据数组,我使用SQL将其从数据库拉入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' =>
$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哪个是?正是我想要的。谢谢你!正是我想要的。谢谢你!