Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse des in PHP implementierten mehrdimensionalen Array-Sortieralgorithmus

Analyse des in PHP implementierten mehrdimensionalen Array-Sortieralgorithmus

不言
不言Original
2018-04-19 14:07:291209Durchsuche

Das Beispiel in diesem Artikel beschreibt den in PHP implementierten mehrdimensionalen Array-Sortieralgorithmus. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Plötzlich erinnerte ich mich an eine Interviewfrage, bei der es darum ging, ein mehrdimensionales Array zu sortieren.

Beispiel:

<?php
//有一个多维数组
$a = array(
  array(&#39;key1&#39;=>940, &#39;key2&#39;=>&#39;blah&#39;),
  array(&#39;key1&#39;=>23, &#39;key2&#39;=>&#39;this&#39;),
  array(&#39;key1&#39;=>894, &#39;key2&#39;=>&#39;that&#39;)
);
//那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, &#39;myfunction&#39;)函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册
//1.对key1的值进行排序
function asc_key1_sort($x, $y) {
  //可以输出一下看看是怎么比较的
  echo &#39;Iteration:&#39;.$x[&#39;key1&#39;].&#39; vs &#39;.$y[&#39;key1&#39;];
  if($x[&#39;key1&#39;] > $y[&#39;key1&#39;]) {
    echo &#39;true<br/>&#39;;
    return true;
  }elseif($x[&#39;key1&#39;] < $y[&#39;key1&#39;]) {
    echo &#39;false<br/>&#39;;
    return false;
  }else {
    echo &#39;0&#39;;
    return 0;
  }
}
//进行排序
usort($a, &#39;asc_key1_sort&#39;);
var_dump($a);
//2.对key2字符进行排序
function asc_key2_sort($x, $y) {
  //可以使用strcasecmp()函数进行排序
  echo &#39;Iteration:&#39;.$x[&#39;key2&#39;].&#39; vs &#39;.$y[&#39;key2&#39;].&#39;<br/>&#39;;
  return strcasecmp($x[&#39;key2&#39;], $y[&#39;key2&#39;]);
}
//进行排序
usort($a, &#39;asc_key2_sort&#39;);
var_dump($a);
?>

Laufergebnisse:

Iteration:23 vs 940false
Iteration:894 vs 23true
Iteration:940 vs 23true
Iteration:894 vs 940false
array(3) { [0]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } } Iteration:that vs this
Iteration:blah vs that
array(3) { [0]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } }

Was passiert, wenn mein mehrdimensionales Array auch Schlüsselwerte hat?

<?php
//有一个多维数组
$a = array(
  123 => array(&#39;key1&#39;=>940, &#39;key2&#39;=>&#39;blah&#39;),
  349 => array(&#39;key1&#39;=>23, &#39;key2&#39;=>&#39;this&#39;),
  43 => array(&#39;key1&#39;=>894, &#39;key2&#39;=>&#39;that&#39;)
);
//那么怎么对key1或者key2进行排序呢,这里就需要使用到usort($arr, &#39;myfunction&#39;)函数了,它的作用是对$arr使用我们自定义的方法进行排序,具体使用方法可以查看手册
//1.对key1的值进行排序
function asc_key1_sort($x, $y) {
  //可以输出一下看看是怎么比较的
  echo &#39;Iteration:&#39;.$x[&#39;key1&#39;].&#39; vs &#39;.$y[&#39;key1&#39;];
  if($x[&#39;key1&#39;] > $y[&#39;key1&#39;]) {
    echo &#39;true<br/>&#39;;
    return true;
  }elseif($x[&#39;key1&#39;] < $y[&#39;key1&#39;]) {
    echo &#39;false<br/>&#39;;
    return false;
  }else {
    echo &#39;0&#39;;
    return 0;
  }
}
//进行排序
usort($a, &#39;asc_key1_sort&#39;);
var_dump($a);
//2.对key2字符进行排序
function asc_key2_sort($x, $y) {
  //可以使用strcasecmp()函数进行排序
  echo &#39;Iteration:&#39;.$x[&#39;key2&#39;].&#39; vs &#39;.$y[&#39;key2&#39;].&#39;<br/>&#39;;
  return strcasecmp($x[&#39;key2&#39;], $y[&#39;key2&#39;]);
}
//进行排序
usort($a, &#39;asc_key2_sort&#39;);
var_dump($a);
?>

Laufergebnisse:

Iteration:23 vs 940false
Iteration:894 vs 23true
Iteration:940 vs 23true
Iteration:894 vs 940false
array(3) { [0]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } } Iteration:that vs this
Iteration:blah vs that
array(3) { [0]=> array(2) { ["key1"]=> int(940) ["key2"]=> string(4) "blah" } [1]=> array(2) { ["key1"]=> int(894) ["key2"]=> string(4) "that" } [2]=> array(2) { ["key1"]=> int(23) ["key2"]=> string(4) "this" } }

Ein solches Sortierergebnis behält 123, 349, 43 nicht bei. Ersetzen Sie zu diesem Zeitpunkt einfach usort() durch uasort!

Verwandte Empfehlungen:

PHP-Methode zum Verdoppeln des Werts (der Anzahl) jeder Zelle in einem mehrdimensionalen Array, mehrdimensionale Verdoppelung_PHP-Tutorial

Das obige ist der detaillierte Inhalt vonAnalyse des in PHP implementierten mehrdimensionalen Array-Sortieralgorithmus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn