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

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


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


我尝试使用array_search,strpos甚至explode首先在数组中创建字符串,然后array_intersect与两个数组相交,希望获得正匹配,但始终只返回值为 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!";

    }

}


慕的地6264312
浏览 127回答 2
2回答

互换的青春

您的代码非常接近。您还需要explode中的磁盘 ID 列表$st_data,然后用于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!";    }}样本数据的输出:FoundArray(    [id] => 1    [title] => Jane doe    [disk] => 1,3,2)FoundArray(    [id] => 2    [title] => Jane Smith    [disk] => 3,1,4)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 //$arrToBeSearchedreturn TRUE;
打开App,查看更多内容
随时随地看视频慕课网APP