PHP merge array (s) и удалить двойные значения

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);