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