Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 比较对象数组中的单个字段_Php_Arrays_Oop - Fatal编程技术网

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

Php 比较对象数组中的单个字段,php,arrays,oop,Php,Arrays,Oop,我正在改造我们库存系统中的包装屏幕。用户打开一个包并插入/删除其中的项目,当他按下Save时,包中所有部分的json数组被发送到PHP端点,该端点负责将包保存到数据库中 到目前为止一切都很好,我已经创建了在PHP和javascript之间发送数据的函数。然而,即使javascript发送给PHP的json数组包含产品的所有信息(因为javascript需要检索这些信息以填充gui中的网格),我仍然必须验证PHP中的所有内容,因为我无法确定用户在尝试保存之前没有篡改控制台中的数据 话虽如此,在PH

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

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

话虽如此,在PHP中,我接收json数组,我使用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数组,这是我的产品类

我现在要做的是对这个对象数组进行验证,以确保所有这些对象都处于正确的状态,以便打包在一起。这些验证包括确保所有产品都具有相同的状态、没有任何产品是装配零件、所有产品都具有相同的所有者等。这样,即使在浏览器控制台中阵列被篡改,我也将确保使用来自DB的信息

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

这样做的最佳方式是什么


谢谢大家!

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

$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
    } ...
}

您可以在显示的
foreach()
循环中执行此检查。