我有一个用逗号分隔的php字符串
$string = (x,y,z)

我在mysql中有一个包含项目(y,z)的列

我想对字符串中但不在表格列中的项目进行数组...

 $cid = "'" . str_replace(",", "','", $cid) . "'";

    $query = mysql_query("SELECT save_key FROM saved WHERE save_key IN ($cid)");

    while ($result = mysql_fetch_assoc($query)){
        $array[] = $result['save_key'];
    }

    $cid_array = explode(',',$cid);

    $dif = array_diff($cid_array, $array);

    print_r($dif);


输出:

来自查询的数组([0] => O45527 [1] => P97387 [2] => Y49437)

来自array_dif的数组([0] =>'P97387'[1] =>'O45527'[2] =>'Y49437')
所有项目都是一样的权利..

print_r($dif);应该返回array()

最佳答案

使用array_diff-计算数组的差

只需使用explode将字符串转换为数组,然后使用array_diff

范例:

<?php

$array1=explode(",",$string);
$array2=explode(",",$yourstring_of_db_column);
$array1 = array("x", "y", "z");
$array2 = array( "y","z");
$result = array_diff($array1, $array2);

print_r($result);
?>


注意:仅当(string)$ elem1 ===(string)$ elem2时,两个元素才视为相等。换句话说:当字符串表示相同时。

来自查询的数组([0] => O45527 [1] => P97387 [2] => Y49437)

来自array_dif的数组([0] =>'P97387'[1] =>'O45527'[2] =>'Y49437')

所以O45527和'O45527'的所有区别都相同,这就是为什么它返回整个数组的原因。尝试将元素值转换为相同的数据类型。

10-06 04:49