删除重复的对象键值

时间:2016-09-05 21:24:08

标签: php arrays object foreach key

我正在使用以下对象数组创建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'。

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:-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>";
    }
} 
?>

但我不能为我的生活找出你在这里想要做的事情。事实证明,这对你来说可能毫无用处