2016-05-25 6 views
0

(PHP):ワード日付を含む要素は、このarray('regdate','editdate','birthday')配列を部分文字列でソートする方法は?私はこのような値を持つ配列をソートする方法を作成した

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

ように左に移動しなければならないような方法で要素を並べ替えるべきarray('regdate','birthday','editdate')しかしをこれをいかにして動作させるかは私には分かりません。私がPHPマニュアルで見つけた例は、引数もクロージャもない関数を示しています。私はクロージャを使うことができないようにPHPバージョン5.2を使用しています。

私はこれがusort($date_cols, $this->sortColumnsBySubstring($value, 'date')だと思いますが、ここでは$ valueは定義されていませんので、解決策ではありません。

質問正しく機能するように関数を実装する方法はありますか?あなたは配列としてコールバックを渡す必要があり

+0

、[この](http://stackoverflow.com/questions/8230538/pass-extra-parameters-to-usort-callback)可能性があり助けます。 – Muriano

+0

[usort()にパラメータを渡す方法は?](http://stackoverflow.com/questions/29823045/how-to-pass-usort-a-parameter) – Muriano

+0

https://3v4l.org/eVP1Pこれをチェックしてください – Ali

答えて

0

最初のソリューションは、私の元の質問に次のとおりです。

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); 
2

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

は、PHPのドキュメントにCallbacks/Callablesを参照してください。

関連する問題