通过参数

时间:2016-06-03 07:51:09

标签: php arrays filtering

我想知道是否有办法通过这样的方式来过滤PHP中的数组:

if (!in_array("something",$something)

现在我想获得与搜索条件不匹配的所有值。

例如,如果我有这样的数组:

$options = array("Preview", "Live", "Completed");

我传递了搜索值:"预览",我想在数组中返回这两个元素" Live"和"已完成"由于我的数组过滤...

我有办法做到这一点吗?

编辑:

我们有一个这样的初始数组:

$options = array("Preview", "Live", "Completed");

搜索数组的初始输入是"预览"字符串。

我喜欢的输出数组是:

$newArray = array("Live", "Completed");

编辑编辑(实际上我想要实现的目标):

大家好,这就是我实际上要做的事情:

<?php foreach($active_brand as $brand?>
 <select>
                            <?php if (in_array($brand['State'], $options)) { ?>
                                <option selected="selected"  value="<?=$brand['id']?>"><?=$brand['State']?></option>
                            <?php }?>
                            <?php for($i=1;$i<count($options);$i++) { ?>
                                <option  value="<?=$brand['id']?>"><?=array_diff($options, array($brand['State']))[$i]?></option>
                            <?php }?>
                        </select>
<?php }?>

正如你可以看到的那样,我在我的数据库中有一个专栏被称为&#34;状态&#34; ...它基本上是一个varchar,我保存我的字符串...品牌状态只能是以下三种状态:

Preview => Live => Completed

我要做的第一件事是将当前值设置为选择列表,如下所示:

<?php if (in_array($brand['State'], $options)) { ?>
                                    <option selected="selected"  value="<?=$brand['id']?>"><?=$brand['State']?></option>
                                <?php }?>

现在我在我的phtml文件中定义了这样的数组:

$options = array("Preview", "Live", "Completed");

现在我只想过滤掉不在数组中的状态,并将它们放在我的select标签中,如下所示:

<?php for($i=1;$i<count($options);$i++) { ?>
                            <option  value="<?=$brand['id']?>"><?=array_diff($options, array($brand['State']))[$i]?></option>
                        <?php }?>

因此,我的选择列表中的结构如下:

品牌的当前状态=&gt;默认选择=&gt;添加两个缺失状态以选择列表(但不添加在DB中设置的当前状态)...

有人能帮助我吗?

3 个答案:

答案 0 :(得分:2)

您可以使用array_diff

$notIn = array_diff($options, array('Preview'));

关于它的好处是,如果需要,可以使用多个值进行过滤。

<强>更新

我认为,执行以下操作会更加清楚:

<?php foreach($active_brand as $brand) { ?>
<select>
    <?php foreach($options as $option) { ?>
        <option <?php if($brand['State'] == $option) { ?>selected="selected"<?php } ?> value="<?=$brand['id']?>"><?php echo $option; ?></option>
    <?php } ?>
</select>
<?php } ?>

答案 1 :(得分:0)

尝试:

function removeAllValuesMatching(array $arr, $value) {
    $keys = array_keys($arr, $value);
    foreach ($keys as $key) {
        unset($arr[$key]);
    }
    return $arr;
}

$options = array("Preview", "Live", "Completed");

removeAllValuesMatching($options, "Preview"); // pass array and value to match

答案 2 :(得分:0)

您可以使用array_filter()

$array = array('Preview', 'Live', 'Completed');
$blacklist = 'Preview';
$result = array_filter($array, function($value) use ($blacklist) {
    if($value !== $blacklist){
        return $value;
    }
});
var_dump($result);
exit;

您可以调整它,因此如果需要,$ blacklist可以是一个数组。