在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

我正在尝试使用PHP构建一个搜索功能。当我们给出一个输入字符串时,它应该根据给定的输入对结果数组值进行排序。应首先列出匹配结果最多的数组。
当我尝试排序时,结果是按照字母顺序排列的。如果有人能帮助我,那就太好了。
这是我的阵列

$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;

                  }


    }

}