我想知道是否有办法通过这样的方式来过滤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中设置的当前状态)...
有人能帮助我吗?
答案 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可以是一个数组。