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

问题描述 投票:0回答:2

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

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

我尝试使用array_searchstrpos甚至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!";
    }
}
php arrays explode strpos array-intersect
2个回答
2
投票

您的代码非常接近。您还需要explode explode中的磁盘ID列表,然后使用$st_data检查该列表中是否存在array_diff中值的[[all:

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!";
    }
}

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

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

© www.soinside.com 2019 - 2024. All rights reserved.