从foreach循环中删除重复项

时间:2014-08-11 15:33:46

标签: php foreach

我正在尝试遍历自定义帖子类型并显示元键的所有元值。

我能够显示所有值,但是有一些重复。我想删除那些重复项。

我尝试过使用array_unique没有运气。

我的代码:

<?php
query_posts(array(
'post_type' => 'lejlighed'

 ));
 ?>
               <?php
while (have_posts()):
the_post();


$meta = get_post_meta($post->ID, 'antal_varelser');

foreach ($meta as $m) {

    echo '<option value="1">' . $m . '</option>';

}
endwhile;
?> 

结果:2 2 3 4 3 3 4

我的代码array_unique

<?php
$the_query = new WP_Query(array(
'post_type' => 'lejlighed',
 ));
 ?>
 <?php

 while ($the_query->have_posts()):
 $the_query->the_post();
 $meta = get_post_meta($post->ID, 'antal_varelser');
 $result = array_unique($meta);

 foreach($result as $r)
 {
 echo '<option value="1">' . $m . '</option>';
 }

 endwhile; ?>

什么都不输出。

print_r($meta)返回:

Array ( [0] => 2 ) Array ( [0] => 12 ) Array ( [0] => 4 ) Array ( [0] => 2 ) Array ( [0] => 5 ) Array ( [0] => 2 ) Array ( [0] => 4 ) Array ( [0] => 4 ) Array ( [0] => 3 ) Array ( [0] => 3 ) 

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

array_unique应该有用。

$result = array_unique($meta);
foreach ($result as $m) {
  echo '<option value="1">' . $m[0] . '</option>';
}

如果没有,那么......

$temp = array();
foreach ($meta as $m) {
  if (!in_array($m[0], $temp)) {
    echo '<option value="1">' . $m[0] . '</option>';
    $temp[] = $m[0];
  }
}

答案 1 :(得分:0)

您可以尝试使用循环并首先填充另一个数组:

bool in_array ( $needle , array $haystack)

然后你应该在新数组中只有唯一的值,可以用于你的循环


修改

对我来说,有两种方法可以......

我们假设给出了这个数组:

$org = array('1', '2', '2', '3', '3', '4', '5', '6');

简单的array_unique:

// simple array unique call with sort by string
$new = array_unique($org, SORT_STRING);

// output the sorted array
var_dump($new);

使用in_array在循环中对数组进行排序:

// sort with in_array()
for ($i=0; $i < count($org); $i++) {

    if (!in_array($org[$i], $new)) {
        $new[] = $org[$i];
    }
}

// output the sorted array
var_dump($new);

Live Demo

答案 2 :(得分:0)

array_unique似乎有效。

<?php
$a = array (
    '1', '2', '2', '3', '4', '5', '4'
);
echo "<pre>initial array\n";
print_r($a);
echo "\n";

$result = array_unique($a);

echo "array_unique\n";
print_r($result);
echo "\n</pre>";
?>

产地:

initial array
Array
(
    [0] => 1
    [1] => 2
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
    [6] => 4
)

array_unique
Array
(
    [0] => 1
    [1] => 2
    [3] => 3
    [4] => 4
    [5] => 5
)

您能提供更多细节吗?这可能有助于我们帮助你。

修改 看到print_r的输出后,此解决方案应该适合您:

<?php
$multi_a = array (
    array (
        '1'
    ),
    array (
        '2'
    ),
    array (
        '3'
    ),
    array (
        '4'
    ),
    array (
        '4'
    ),
    array (
        '5'
    ),
    array (
        '2'
    )
);
echo "<pre>initial multi-dimensional array\n";
print_r($multi_a);
echo "\n";

$result = array_map("unserialize", array_unique(array_map("serialize", $multi_a)));

echo "removed duplicates in multi-dimension array\n";
print_r($result);

echo "\n</pre>";
?>

输出:

initial multi-dimensional array
Array
(
    [0] => Array
        (
            [0] => 1
        )

    [1] => Array
        (
            [0] => 2
        )

    [2] => Array
        (
            [0] => 3
        )

    [3] => Array
        (
            [0] => 4
        )

    [4] => Array
        (
            [0] => 4
        )

    [5] => Array
        (
            [0] => 5
        )

    [6] => Array
        (
            [0] => 2
        )

)

removed duplicates in multi-dimension array
Array
(
    [0] => Array
        (
            [0] => 1
        )

    [1] => Array
        (
            [0] => 2
        )

    [2] => Array
        (
            [0] => 3
        )

    [3] => Array
        (
            [0] => 4
        )

    [5] => Array
        (
            [0] => 5
        )

)

取自 https://stackoverflow.com/a/946300/720829 HTH