从数组 IF 取消设置元素
Posted
技术标签:
【中文标题】从数组 IF 取消设置元素【英文标题】:Unset Element from Array IF 【发布时间】:2018-07-16 19:53:45 【问题描述】:我从数据库中获取了一些数据,这些数据保存在“$Data”中。 $Data 看起来像这样:
[Data] => Array
(
[0] => Array
(
[PrinterID] => 3
[PrinterName] => PRT03_EDV
[isDefaultPrinter] => 1
[isMapped] => 0
)
[1] => Array
(
[PrinterID] => 1
[PrinterName] => PRT01_Zentral
[isDefaultPrinter] => 0
[isMapped] => 1
)
[2] => Array
(
[PrinterID] => 2
[PrinterName] => PRT02_BH
[isDefaultPrinter] => 0
[isMapped] => 0
)
我需要验证 $Data 中没有数组,其中“isDefaultPrinter == True”和“isMapped == False”。以编程方式:
if ( $Data["isDefaultPrinter"] == true and $Data["isMapped"] == false )
// Remove from Array
我确实开始根据this 自己编写代码,结果是一个看起来很糟糕的嵌套循环,它不起作用:-( 我是一个初学者,我想问一下,是否有一种简单易用的方法来做到这一点?
谢谢
【问题讨论】:
在你养成一些真正的坏习惯之前,请请使用小写字母,例如if
、and
和true
。虽然 php 不区分大小写,但这不是标准的,看起来很糟糕。
什么“嵌套循环”?如果您对此有疑问,请同时包含该代码。
我确实开始根据以下代码编写代码:***.com/questions/2304570/… 我不知道,这是否是正确的方式...
尽量让您的问题保持独立。不是每个人都准备好打开一堆标签来尝试理解问题中的所有部分。它对那些在移动设备上无法真正处理来源的用户尤其有用。
【参考方案1】:
这是一个使用array_filter
的版本,它就是为此而构建的。见http://php.net/manual/en/function.array-filter.php
$valid = array_filter($Data, function($var)
return !($var['isDefaultPrinter'] && !$var['isMapped']);
);
【讨论】:
我相信其他答案也可以,但我最喜欢这个。这似乎是我一直在寻找的东西并保持代码干净。非常感谢!【参考方案2】:您可以使用unset
删除不符合“保留”条件的数组行。您需要知道数组键才能整齐地删除它;此 foreach 也具有 $key
值:
foreach ($var['Data'] as $key => $entry)
// Examine every entry
if ($entry['isDefaultPrinter'] && !$entry['isMapped'])
// $entry does not meet criteria
unset($var['Data'][$key]);
print_r($var); //output remaining values.
一旦完成 - 如果您愿意 - 您可以使用 array_values()
重新索引 [outer] 数组:
$var['Data'] = array_values($var['Data']);
【讨论】:
【参考方案3】:使用foreach
循环遍历数据数组:
foreach ($Data['Data'] as $entry)
// Examine every entry
if ($entry['isDefaultPrinter'] && !$entry['isMapped'])
// $entry does not meet criteria
您可以编写一个函数来验证每个条目是否符合您的条件:
function validateData($Data)
foreach ($Data['Data'] as $entry)
// Examine every entry
if ($entry['isDefaultPrinter'] && !$entry['isMapped'])
// $entry does not meet criteria
return false;
// Everything is OK
return true;
var_dump(validateData($Data));
【讨论】:
以上是关于从数组 IF 取消设置元素的主要内容,如果未能解决你的问题,请参考以下文章