【问题标题】:Remove duplicate object key values删除重复的对象键值
【发布时间】:2017-01-13 06:04:18
【问题描述】:

我正在使用以下对象数组创建一个 HTML 表单选择元素。

Array
(
    [0] => stdClass Object
        (
            [post_title] => Showing Now Review
        )

    [1] => stdClass Object
        (
            [post_title] => Interstellar
        )

    [2] => stdClass Object
        (
            [post_title] => The Conjuring 2
        )

    [3] => stdClass Object
        (
            [post_title] => Django Unchained
        )

    [4] => stdClass Object
        (
            [post_title] => Captain America: Civil War
        )

    [5] => stdClass Object
        (
            [post_title] => Dallas Buyers Club
        )
)

这是一个名为 $reviewTitles 的数组的内容。

然后我想遍历这个,并在选择中显示每个标题的第一个字母。

到目前为止,我已经使用以下代码实现了这一点:

foreach($reviewTitles as $key => $value) { 
  $fullTitle = $reviewTitles[$key]->post_title; 
  $firstLetter = substr($fullTitle, 0, 1); ?>

<option value="<?php echo($firstLetter); ?>" <?php echo($_POST[ 'cboTitle']=="<?php echo($firstLetter); ?>" ? "selected='selected'": "")?>>
  <?php echo($firstLetter); ?>
</option>

<?php } ?>

但是,使用此代码,如果标题与之前显示的字母相同,它将再次显示在下拉列表中。例如,此时下拉菜单中会显示两个 D。

我想知道如何从选择元素的最终列表中删除任何重复的条目。

任何帮助将不胜感激。

【问题讨论】:

  • 为什么使用第一个字母作为选项值?使用其他东西,这样你就不会有重复的问题。

标签: php arrays object foreach key


【解决方案1】:

第一:

你似乎不明白 foreach 循环在做什么。 $value 实际上将依次是每个对象

<?php
foreach($reviewTitles as $key => $value) { 
    $firstLetter = substr($value->post_title, 0, 1); 
    $sel = $_POST['cboTitle'] == $firstLetter ? 'selected="selected"' : '';
    echo "<option $sel value='$firstLetter'>$firstLetter</option>";
} 
?>

现在要停止重复打印,记住数组中的第一个字母,然后检查新的第一个字母是否已经在数组中

<?php
$f_letters = array();
foreach($reviewTitles as $key => $value) { 
    $firstLetter = substr($value->post_title, 0, 1); 
    if ( !in_array($firstLetter, $f_letters) ) {
        $f_letters[] = $firstLetter;
        $sel = $_POST['cboTitle'] == $firstLetter ? 'selected="selected"' : '';
        echo "<option $sel value='$firstLetter'>$firstLetter</option>";
    }
} 
?>

但我终其一生都无法弄清楚你在这里真正想要做什么。这很可能在现实中证明对你毫无用处

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 2018-09-06
    • 2021-10-26
    • 2021-08-26
    • 1970-01-01
    • 2015-05-13
    • 2011-02-16
    • 2019-08-27
    相关资源
    最近更新 更多