WP выводит массив:
$therapie = get_post_meta($post->ID, 'Therapieen', false); print_r($therapie); //the output of print_r Array ( [0] => Massagetherapie ) Array ( [0] => Hot stone ) Array ( [0] => Massagetherapie )
Как объединить эти массивы в один и удалить все точные двойные имена?
В результате чего-то вроде этого:
theArray ( [0] => Massagetherapie [1] => Hot stone )
[SOLVED] проблема заключалась в том, что если вы это сделаете в цикле while, это не будет работать здесь мое решение, для всех ответов и хорошего кода. Его запуск цикла и толкает каждый результат в массиве.
<?php query_posts('post_type=therapeut'); $therapeAr = array(); ?> <?php while (have_posts()) : the_post(); ?> <?php $therapie = get_post_meta($post->ID, 'Therapieen', true); if (strpos($therapie,',') !== false) { //check for , if so make array $arr = explode(',', $therapie); array_push($therapeAr, $arr); } else { array_push($therapeAr, $therapie); } ?> <?php endwhile; ?> <?php function array_values_recursive($ary) { //2 to 1 dim array $lst = array(); foreach( array_keys($ary) as $k ) { $v = $ary[$k]; if (is_scalar($v)) { $lst[] = $v; } elseif (is_array($v)) { $lst = array_merge($lst,array_values_recursive($v)); }} return $lst; } function trim_value(&$value) //trims whitespace begin&end array { $value = trim($value); } $therapeAr = array_values_recursive($therapeAr); array_walk($therapeAr, 'trim_value'); $therapeAr = array_unique($therapeAr); foreach($therapeAr as $thera) { echo '<li><input type="checkbox" value="'.$thera.'">'.$thera.'</input></li>'; } ?>
Следующее должно сделать трюк.
$flattened = array_unique(call_user_func_array('array_merge', $therapie));
или более эффективную альтернативу (благодаря комментарию Эриско ) :
$flattened = array_keys(array_flip( call_user_func_array('array_merge', $therapie) ));
Если ключи $therapie
– это строки, вы можете отказаться от array_unique
.
В качестве альтернативы, если вы хотите избежать call_user_func_array
, вы можете изучить различные способы сглаживания многомерного массива. Вот несколько ( один , два ) хороших вопроса уже о том, что SO подробно описывает несколько разных методов.
Я должен также отметить, что это будет работать только в том случае, если $therapie
является только двумерным массивом, если вы не хотите полностью ее сгладить. Если $therapie
больше двух измерений, и вы хотите сгладить ее в 1 измерение, взгляните на вопросы, которые я связал выше.
Соответствующие записи в документе:
array_flip
array_keys
array_merge
array_unique
call_user_func_array
Похоже, что ключи создаваемых вами массивов несущественны. Если это так, вы можете сделать простое слияние, а затем определить уникальные со встроенными функциями PHP:
$array = array_merge($array1, $array2, $array3); $unique = array_unique($array);
edit: пример:
// Emulate the result of your get_post_meta() call. $therapie = array( array('Massagetherapie'), array('Hot stone'), array('Massagetherapie'), ); $array = array(); foreach($therapie as $thera) { $array = array_merge($array, $thera); } $unique = array_unique($array); print_r($unique);
PHP array_unique () будет удалять повторяющиеся значения из массива.
$tester = array(); foreach($therapie as $thera) { array_push($tester, $thera); } $result = array_unique($tester); print_r($result);