如何通过子字符串对数组进行排序?(¨PHP)

10 浏览
0 Comments

如何通过子字符串对数组进行排序?(¨PHP)

我已经创建了一个用于排序数组的方法,数组的值如下:array('regdate','birthday','editdate'),应该按照包含date单词的元素将元素移到左边,如下:array('regdate','editdate','birthday')

public function sortColumnsBySubstring($haystack, $substr){
   if ($haystack == $substr) {
          return 0;
      }
    return strpos($substr) !== false ? -1 : 1; 
 }

然而,对于如何使其工作,我还不清楚。在PHP手册中找到的示例显示该函数没有参数或闭包 - 我使用的是PHP 5.2版本,所以无法使用闭包。

我能想到的只有这个usort($date_cols, $this->sortColumnsBySubstring($value, 'date'),但是这里的$value未定义,所以这不是一个解决方案。

问题是如何正确实现这个函数?

0
0 Comments

如何通过子字符串对数组进行排序?(PHP)

第一个解决方案是针对我的原始问题:

function cmp($a, $b)
{
    $adate = (strpos($a, 'date') !== false);
    $bdate = (strpos($b, 'date') !== false);
    if (!($adate ^ $bdate)) return strcmp($a, $b);
    return $adate ? -1 : 1;
}
$a = array('birthday', 'regdate', 'editdate');
usort($a, 'cmp');

第二个解决方案是将数组拆分为两个数组,排序后再合并它们。我尝试使用与时间相关的更多词来识别与时间相关的值。

private function getDateColumns(&$array)
{
    $search_date_columns = array('date','datetime','timestamp','time','edited','changed','modified','created','datum');
    $result = array( array(), array() );
    foreach($array as $v1):
        $found = false;
        foreach($search_date_columns as $v2)
            if ( strpos($v1, $v2)!==false )
            { 
                $found = true; 
                break; 
            }
        if ($found)
            $result[0][] = $v1;
        else
            $result[1][] = $v1;
    endforeach;
    return $result;
}

实现如下:

$date_cols = array('regdate','time','editdate','createdate','personal','mojedatum','edited','test','modified','changed','pokus','timestamp','hlava');
$arrays = $this->getDateColumns($date_cols);
rsort($arrays[0]);
$date_cols = array_merge($arrays[0], $arrays[1]); 
unset($arrays);
print_r($date_cols);

以上是如何通过子字符串对数组进行排序的解决方法。

0
0 Comments

问题:如何按子字符串对数组进行排序?

原因:该问题的出现是因为在PHP中,对数组按子字符串进行排序需要通过回调函数来实现,而不是直接调用排序函数。

解决方法:解决这个问题的方法是使用usort()函数,并将回调函数以数组的形式传递给它。具体代码如下:

usort($date_cols, [$this, 'sortColumnsBySubstring']);

上述代码中,$date_cols是需要排序的数组,[$this, 'sortColumnsBySubstring']是回调函数的数组形式表示。通过这种方式,可以按照指定的子字符串对数组进行排序。

另外,如果想了解更多关于回调函数的使用方法,可以参考PHP文档中的Callbacks / Callables部分。

0