PHP слить массив (ы) и удалить двойные значения - PullRequest
3 голосов
/ 30 мая 2011

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
)

[решено] проблема была в том, что если вы сделаете это в цикле while, здесь не сработает мое решение, ty для всех ответов и хорошего кода. Он запускает цикл и отправляет каждый результат в массив.

<?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>';
} ?>                 

Ответы [ 4 ]

4 голосов
/ 30 мая 2011

Следующее должно сделать трюк.

$flattened = array_unique(call_user_func_array('array_merge', $therapie));

или более эффективная альтернатива (благодаря комментарию erisco ) :

$flattened = array_keys(array_flip(
    call_user_func_array('array_merge', $therapie)
));

Если ключи $therapie являются строками, вы можете сбросить array_unique.

В качестве альтернативы, если вы хотите избежать call_user_func_array, вы можете рассмотреть различные способы выравнивания многомерного массива. Вот несколько ( один , два ) хороших вопросов о SO, в которых подробно описываются несколько различных методов для этого.

Следует также отметить, что это будет работать только в том случае, если $therapie является только 2-мерным массивом , если не требуется выравнивать его полностью. Если $therapie больше двух измерений, и вы хотите свести его в одно измерение, взгляните на вопросы, которые я связал выше.

Соответствующие записи в документе:

array_flip
array_keys
array_merge
array_unique
call_user_func_array

4 голосов
/ 30 мая 2011

Звучит так, что ключи генерируемых вами массивов незначительны.Если это так, вы можете сделать простое слияние , а затем определить уникальные со встроенными функциями 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);
2 голосов
/ 30 мая 2011

PHP array_unique () удалит повторяющиеся значения из массива.

0 голосов
/ 30 мая 2011
$tester = array();
foreach($therapie as $thera) {
   array_push($tester, $thera);
}
$result = array_unique($tester);
print_r($result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...