PHP 将逗号分隔的字符串与数组值匹配,但顺序不准确

PHP match comma separated string with array value but not in exact order

我有一个可能很简单的查询,但无法在任何地方找到确切的解决方案。

有一个逗号分隔的字符串,例如 1,3 和一个包含值的数组,例如 1,3,2 OR 3,1,4。我需要一个函数,当我尝试在数组中搜索此字符串时,它 returns 对于两个记录都是 TRUE,因为两个数组值中都存在数字 1 和 3,但顺序不同。

我曾尝试使用 array_searchstrpos 甚至 explode 首先在数组中创建字符串,然后 array_intersect 与两个数组相交,希望得到一个正匹配但始终只有 returns 值为 1,3,2 而不是 3,1,4 的数组。

任何建议或指示都将非常有帮助。

非常感谢。

======================

PS:这是我的代码

        //Enter your code here, enjoy!
$st_array = array();
$st_data1['id'] = 1;
$st_data1['title'] = 'Jane doe';
$st_data1['disk'] = '1,3,2';
array_push($st_array, $st_data1);

$rc_disk_id = '1,3';

$st_data2['id'] = 2;
$st_data2['title'] = 'Jane Smith';
$st_data2['disk'] = '3,1,4';
array_push($st_array, $st_data2);


foreach($st_array as $st_data) {
    $rc_disk_ids = explode(",",$rc_disk_id);
    $match = array_intersect($rc_disk_ids, $st_data);
    if (!empty($match)) {
        echo "\nFound\n";
        print_r($st_data);
    }
    else {
        echo "Nope!";
    }
}

您的代码非常接近。您还需要 explode the list of disk ids in $st_data, and then use array_diff 检查 所有 $rc_disk_ids 中的值是否存在于该列表中:

foreach($st_array as $st_data) {
    $rc_disk_ids = explode(",",$rc_disk_id);
    $st_disk_ids = explode(',', $st_data['disk']);
    $match = array_diff($rc_disk_ids, $st_disk_ids);
    if (empty($match)) {
        echo "\nFound\n";
        print_r($st_data);
    }
    else {
        echo "Nope!";
    }
}

示例数据的输出:

Found
Array
(
    [id] => 1
    [title] => Jane doe
    [disk] => 1,3,2
)

Found
Array
(
    [id] => 2
    [title] => Jane Smith
    [disk] => 3,1,4
)

Demo on 3v4l.org

也许您可以尝试搜索字符串而不是比较数组。

$strArr = explode(",", "1,3");
$arrToBeSearched = ["1", "3", "2"];

foreach($strArr as $val){
    if(!in_array($val, $arrToBeSearched)){
        return FALSE;
    }
}

// If it reaches here, then all values in 
//the $strArr where found in the 
//$arrToBeSearched
return TRUE;