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

Php 基于SQL查询从多维数组中删除数组,php,mysql,arrays,multidimensional-array,Php,Mysql,Arrays,Multidimensional Array,我的多维数组是: Array ( [0] => stdClass Object ( [processId] => H5-05848939 [productCode] => ITBYMZ [availabilityStatus] => InstantConfirmation [totalPrice] => 27 [packagingType] => Box )

我的多维数组是:

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数据库:

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"];
    }
}
($n=0;$n<60;$n++)的
{
$productc=$productCodes[$n];
$result=mysql_query(“从平面_表中选择ImageURL,其中ProductCode='$productc'”,$link);
如果(!$result){
die(“数据库查询失败:”.mysql_error());
}
while($row=mysql\u fetch\u数组($result)){
$ImageURL[$n]=$row[“ImageURL”];
}
}
有什么想法吗?我该怎么做:
我需要从上述阵列中删除所有没有图像的产品。

因此,首先只需提取所有没有图像的产品代码,如:

SELECT f.ProductCode FROM Flat_table f WHERE f.ImageURL IS NULL 
注意:如果字段为空时不是
NULL
,而是类似
0
或空字符串,则需要调整该查询。在数组中包含所有这些id后(循环结果并生成类似于
数组('IYDYMZ','ITOLDZ')
)的数组),您可以在产品对象数组上使用数组过滤器:

$filtered = array_filter($arr, function ($a) use ($noImageIds) {
    return !(in_array($a->productCode, $noImageIds));
});
此外,您还应该真正使用PDO或mysqli,
mysql\uquot.
函数已被弃用,因此对于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 doesnt have an image
        return !(in_array($a->productCode, $noImageProducts));
    });

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

多维数组的起源是什么?也来自DB?为什么不直接查询那些有图像的条目呢url@Ghost它的SOAP响应如果没有那么多,那么您可以查询每个元素并进行检查,如果每个代码都是unique@Ghost这只是一个有3种产品的例子,主要回复有1000多条记录,也可以这样做,通过添加一些基本的错误检查来过滤。除非
$db->prepare()
无法准备查询,否则您不应该得到该错误,但是您应该在
$stmt->execute()
之后尽快得到它,因为
$stmt
将为false…我确实修复了错误(一些键入错误的变量),但是$noImageHotels总是空的,我看不到数组的创建位置。,