从数组IF

时间:2018-02-06 17:07:23

标签: php

我从数据库中获取了一些数据,该数据保存在“$ 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自行编码,我的结果是一个看起来很糟糕的嵌套循环,但没有用:-(
我是初学者,我想问一下,如果有一个很好的方法可以做到这一点吗?

谢谢

3 个答案:

答案 0 :(得分:1)

使用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));

答案 1 :(得分:1)

您可以使用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()重新索引[外部]数组:

$var['Data'] = array_values($var['Data']);

答案 2 :(得分:1)

这是一个使用array_filter的版本,它是为此而构建的。见http://php.net/manual/en/function.array-filter.php

$valid = array_filter($Data, function($var) {
    return !($var['isDefaultPrinter'] && !$var['isMapped']);
});