php 基于SQL查询从多维数组中删除数组

svmlkihl  于 2023-11-16  发布在  PHP
关注(0)|答案(1)|浏览(98)

我的多维数组是:

Array ( 
[0] => stdClass Object ( 
    [processId] => H5-05848939 
    [productCode] => ITBYMZ 
    [availabilityStatus] => InstantConfirmation 
    [totalPrice] => 27 
    [packagingType] => Box 
                        ) 
[1] => stdClass Object ( 
    [processId] => H5-05848939 
    [productCode] => ITOLDZ 
    [availabilityStatus] => InstantConfirmation 
    [totalPrice] => 37 
    [packagingType] => Box 
                        ) 
[2] => stdClass Object ( 
    [processId] => H5-05848939 
    [productCode] => IYDYMZ 
    [availabilityStatus] => InstantConfirmation 
    [totalPrice] => 37 
    [packagingType] => Bulk 
                        ) 
 )

字符串
我有一个SQL数据库,其中包含几乎所有的产品图像。我需要从上述数组中删除所有没有图像的产品。
我用下面的代码查询sql db:

for ($n = 0; $n < 60; $n++) {
    $productc= $productCodes[$n];
    $result = mysql_query("SELECT ImageURL FROM Flat_table where ProductCode= '$productc'", $link);
    if (!$result) {
        die("Database query failed: " . mysql_error());
    }
    while ($row = mysql_fetch_array($result)) {
        $ImageURL[$n] = $row["ImageURL"];
    }
}


有任何想法我怎么能做到这一点:* 我需要从上述阵列中删除所有没有图像的产品。*

i7uaboj4

i7uaboj41#

所以,首先只是拉所有的产品代码,没有像这样的图像:

SELECT f.ProductCode FROM Flat_table f WHERE f.ImageURL IS NULL

字符串
注意,如果你的字段不是NULL,而是像0或和空字符串,那么你需要调整这个查询。在你把所有这些id放在一个数组中之后(循环结果并创建一个像Array('IYDYMZ', 'ITOLDZ')这样的数组),你可以只对产品对象的数组使用数组过滤器:

$filtered = array_filter($arr, function ($a) use ($noImageIds) {
    return !(in_array($a->productCode, $noImageIds));
});


另外,你应该真正使用PDO或mysqli,mysql_*函数已被弃用,因此对于PDO,完整的解决方案可能如下所示:

// our array from the api is called $products
$db = new PDO($dsn, $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {
    $stmt = $db->prepare('SELECT f.ProductCode FROM Flat_table f WHERE f.ImageURL IS NULL');
    $stmt->execute();

    $noImageProducts = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
    $filteredProducts = array_filter($products, function ($a) use ($noImageProducts) {
        // returning true means "keep", while false means omit
        // if the productCode is in the array it doesn't have an image
        return !(in_array($a->productCode, $noImageProducts));
    });

} catch (Exception $e) {
   echo $e->getMessage();
}

相关问题