比较对象数组中的单个字段

时间:2018-11-15 19:07:48

标签: php arrays oop

我正在修改库存系统中的包装屏幕。用户打开一个包并插入/删除其中的项目,然后按Save,将包中所有部分的json数组发送到PHP端点,该端点负责将包保存在数据库中。 / p>

到目前为止,一切都很好,我已经创建了在PHP和javascript之间发送数据的函数。但是,即使javascript发送到PHP的json数组包含了产品的所有信息(因为无论如何要检索它以填充gui网格中的javascript都需要javascript),我仍然必须验证PHP中的所有内容,因为我无法在尝试保存之前,请确保用户没有篡改控制台中的数据。

这样说,在PHP中,我收到json数组,我使用ID将ID正确的对象列表加载到数组中。我正在这样做:

$in  = str_repeat('?,', count($itemIDs) - 1) . '?';
$sql = "SELECT * FROM tbProduct WHERE nID IN ($in)";
$sttmt = $db->prepare($sql);
$sttmt->execute($itemIDs);

$res = $sttmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($res as $key => $productInfo) {
    $prod = new tbProduct($db);
    $prod->loadFromArray($productInfo);
}

到目前为止,我现在有一个tbProduct数组,这是我的产品类。

我现在要做的是在此对象数组上运行验证,以确保所有这些objets处于正确的包装状态。这些验证包括确保所有产品具有相同的状态,所有产品都不是装配零件,所有产品都具有相同的所有者等。这样,即使阵列在浏览器控制台中被篡改,我也可以务必确保仍然使用数据库中的信息。

所以我需要一种方法来验证这一点。我可以做一个foreach,将第一个项目中需要检查的所有内容存储在变量中,然后将每个后续项目与这些变量进行比较,但是我敢肯定有更好的方法可以做到这一点。我需要一些效率更高的东西。我的包装可以(并且将包含)数百种产品,因此解决方案需要快速。

做这件事的最好方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以在处理查询返回的所有数据的循环中执行此操作。将变量设置为第一个对象,然后可以将其他元素与其进行比较。

$res = $sttmt->fetchAll(PDO::FETCH_ASSOC);

$firstprod = new tbProduct($db);
$firstprod->loadFromArray(array_shift($res));

foreach ($res as $key => $productInfo) {
    $prod = new tbProduct($db);
    $prod->loadFromArray($productInfo);
    if ($prod->status != $firstprod->status) {
        // report inconsistent status
    } elseif ($prod->owner != $firstprod->owner) {
        // report inconsistent owner
    } elseif ($prod->type != "assembly") {
        // report that it must ba an assembly part
    } ...
}