【问题标题】:Unset Element from Array IF从数组 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 不区分大小写,但这不是标准的,看起来很糟糕。
  • 什么“嵌套循环”?如果您对此有疑问,请同时包含该代码。
  • 我确实开始根据以下代码编写代码:stackoverflow.com/questions/2304570/… 我不知道,这是否是正确的方式...
  • 尽量让您的问题保持独立。不是每个人都准备好打开一堆标签来尝试理解问题中的所有部分。它对那些在移动设备上无法真正处理来源的用户尤其有用。

标签: php


【解决方案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));
    

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 2013-04-11
      • 2014-09-21
      • 1970-01-01
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      相关资源
      最近更新 更多