我正在使用以下对象数组创建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元素的最终列表中删除任何重复的条目。
非常感谢任何帮助。
答案 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>";
}
}
?>
但我不能为我的生活找出你在这里想要做的事情。事实证明,这对你来说可能毫无用处