从数组 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 自己编写代码,结果是一个看起来很糟糕的嵌套循环,它不起作用:-( 我是一个初学者,我想问一下,是否有一种简单易用的方法来做到这一点?

谢谢

【问题讨论】:

在你养成一些真正的坏习惯之前,请使用小写字母,例如ifandtrue。虽然 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 取消设置元素的主要内容,如果未能解决你的问题,请参考以下文章

PHP无法取消设置对象内的数组元素

如何从 PHP 数组中取消设置数字索引元素?

PHP - 在foreach循环中取消设置数组元素[重复]

如何在php中取消设置xml元素?

通过引用取消设置数组的元素

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?