问题。
我有一个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
);
它们包括完整的title和date值,但被分为多个单独的数组,我需要将其分为相应的组,例如您可以在下面的解决方案中看到来自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
我的问题
我是否可以进行一些改进以重构它以使其更清洁?如果可能的话,它将大大提高我的PHP知识。
答案 0 :(得分:2)
您可以使用array_column使用Optionall index_key在输入数组中获取单个列。
尝试这种方式。
$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;