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_search
、strpos
甚至 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
)
也许您可以尝试搜索字符串而不是比较数组。
$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;
我有一个可能很简单的查询,但无法在任何地方找到确切的解决方案。
有一个逗号分隔的字符串,例如 1,3 和一个包含值的数组,例如 1,3,2 OR 3,1,4。我需要一个函数,当我尝试在数组中搜索此字符串时,它 returns 对于两个记录都是 TRUE,因为两个数组值中都存在数字 1 和 3,但顺序不同。
我曾尝试使用 array_search
、strpos
甚至 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
)
也许您可以尝试搜索字符串而不是比较数组。
$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;