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