在PHP中,如何根据输入字符串值对多维数组的内部数组进行排序?
我正在尝试使用PHP构建一个搜索功能。当我们给出一个输入字符串时,它应该根据给定的输入对结果数组值进行排序。应首先列出匹配结果最多的数组。在PHP中,如何根据输入字符串值对多维数组的内部数组进行排序?,php,sorting,multidimensional-array,Php,Sorting,Multidimensional Array,我正在尝试使用PHP构建一个搜索功能。当我们给出一个输入字符串时,它应该根据给定的输入对结果数组值进行排序。应首先列出匹配结果最多的数组。 当我尝试排序时,结果是按照字母顺序排列的。如果有人能帮助我,那就太好了。 这是我的阵列 $sourceArray = array( Array ( 'name' => 'MODERN FAMILY SPINOFF AKA CORRIGAN, PAUL & BRAD WALSH PROJECT', 'st
当我尝试排序时,结果是按照字母顺序排列的。如果有人能帮助我,那就太好了。
这是我的阵列
$sourceArray = array( Array
(
'name' => 'MODERN FAMILY SPINOFF AKA CORRIGAN, PAUL & BRAD WALSH PROJECT',
'status' => 'D',
'season' => '2014-2015',
),
Array
(
'name' => 'E! ENTERTAINMENT SPECIAL: MODERN FAMILY',
'status' => 'D',
'season' => '2014-2015',
),
Array
(
'name' => 'MODERN FAMILY AKA MY AMERICAN FAMILY AKA LEVITAN, STEVEN & LLOYD, CHRIS PROJECT',
'status' => 'D',
'season' => '2009-2010'
),
Array
(
'name' => 'MODERN FAMILY',
'status' => 'P',
'season' => '2015-2016',
),
Array
(
'name' => 'E! ENTERTAINMENT SPECIAL: MODERN FAMILY',
'status' => 'P',
'season' => '2013-2014',
), Array
(
'name' => 'E! ENTERTAINMENT SPECIAL: MODERN FAMILY',
'status' => 'D',
'season' => '2014-2015',
));
可以执行以下操作以返回与搜索条件匹配的数组键:
$results = array_keys(array_column($sourceArray, 'name'), 'Family');
以下代码将帮助您根据输入字符串值对多维数组进行排序。它还允许匹配精确字符串和子字符串。在断点中提及字符串的第二部分
usort($sourceArray, 'name_sort');
print_r($sourceArray);
function name_sort($a, $b) {
global $incVal;
$incVal++;
$sampleText = "Your Text Input";
if(strcmp($a['name'],$sampleText)==0 && strcmp($b['name'],$sampleText)==0)
{
return 0;
}
else
{
if(strcmp($a['name'],$sampleText)==0)
{
return -1;
}
}
if(strpos($a['name'],$sampleText)=== false)
{
if(strpos($b['name'],$sampleText)=== false)
{
return 0;
}
else
{
$b = explode($sampleText,$b['name']);// $b['name'];
if(strpos($b[1],'Break Point')== 1)
{
return 1;
}
elseif(strpos($a[1],'Break Point')== 1)
{
return -1;
}
else
{
return 0;
}
}
}
else
{
if(strpos($b['name'],$sampleText)=== false)
{
return 0;
}
else
{
$a = explode($sampleText,$a['name']);//$a['name'];
$b = explode($sampleText,$b['name']);// $b['name'];
if(strpos($b[1],'Break Point')== 1)
{
return 1;
}
elseif(strpos($a[1],'Break Point')== 1)
{
return -1;
}
elseif(strpos($b[1],'Break Point')> 1)
{
return 1;
}
else {
return 0;
}
}
}