我有一个可能简单的查询,但在任何地方都找不到确切的解决方案。
有一个逗号分隔的字符串,例如1,3和一个具有值的数组,例如1,3,2或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!";
}
}
您的代码非常接近。您还需要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!";
}
}
Found
Array
(
[id] => 1
[title] => Jane doe
[disk] => 1,3,2
)
Found
Array
(
[id] => 2
[title] => Jane Smith
[disk] => 3,1,4
)