【问题标题】:Remove duplicate from foreach loop从 foreach 循环中删除重复项
【发布时间】:2014-08-11 15:33:46
【问题描述】:

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

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

我尝试过使用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 ) 

有什么建议吗?

【问题讨论】:

  • 你用array_unique 编码了什么?您是否尝试过使用in_array 仅添加不存在的项目?
  • 通过查看此代码,我认为您正在查询并且有重复项。也许您的查询有误?
  • This 似乎是您的解决方案
  • 查询应该是正确的,因为我需要我所有帖子的值。其中一些是重复的 - 我需要摆脱它们。

标签: php foreach


【解决方案1】:

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];
  }
}

【讨论】:

  • 我自己尝试了第一个解决方案,但没有运气。第二种解决方案也不起作用。
  • 你能提供你为print_r($meta);得到的结果吗?
  • 仍然返回重复值。
  • 这两个都不能返回重复值。
  • 在这里测试了这两个:sandbox.onlinephpfunctions.com/code/…
【解决方案2】:

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

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

【讨论】:

  • @Karsten 我为您添加了两个不同的示例代码,包括现场演示
【解决方案3】:

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/720829HTH

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 1970-01-01
    • 2019-03-14
    • 2021-09-18
    • 1970-01-01
    • 2020-04-19
    • 2012-02-15
    • 2019-12-07
    相关资源
    最近更新 更多