<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Comments on: Сортировка массива по полю или uasort на стероидах</title>
	<atom:link href="http://php.southpark.com.ua/2007/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/feed/" rel="self" type="application/rss+xml" />
	<link>http://php.southpark.com.ua/2007/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/</link>
	<description>Хитрости и секреты CakePHP</description>
	<pubDate>Tue, 06 Jan 2009 07:00:58 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Victor</title>
		<link>http://php.southpark.com.ua/2007/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/comment-page-1/#comment-552</link>
		<dc:creator>Victor</dc:creator>
		<pubDate>Thu, 06 Mar 2008 16:33:22 +0000</pubDate>
		<guid isPermaLink="false">http://php.southpark.com.ua/2007/10/17/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/#comment-552</guid>
		<description>В функции было две баги (портятся ключи, не правильно обрабатывает DESC). 
Вот исправленный вариант:

function masort(&#38;$data, $sortby) {
	static $funcs = array();
	
	if (empty($funcs[$sortby])) {
		$code = "\$c=0;";		
		foreach ($data as &#38;$array) { break; }		
		foreach (split(',', $sortby) as $key) {
			$key = trim($key);
			if (strlen($key)&#62;5 &#38;&#38; substr($key, -5)==' DESC') {
				$asc = false;
				$key = substr($key, 0, strlen($key)-5);
			} else {
				$asc = true;
			}

			if(is_numeric($array[$key])) {
				$code .= "if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] " . (($asc)?'') . " \$b['$key']) ? -1 : 1 )) ) return \$c;";
			} else {
				$code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return " . (($asc)?'':'-') . "\$c;\n";
			}
		}
		$code .= 'return $c;';
		$func = $funcs[$sortby] = create_function('$a, $b', $code);
	} else {
		$func = $funcs[$sortby];
	}
	 
	return uasort($data, $func);
}</description>
		<content:encoded><![CDATA[<p>В функции было две баги (портятся ключи, не правильно обрабатывает DESC).<br />
Вот исправленный вариант:</p>
<p>function masort(&amp;$data, $sortby) {<br />
	static $funcs = array();</p>
<p>	if (empty($funcs[$sortby])) {<br />
		$code = &#8220;\$c=0;&#8221;;<br />
		foreach ($data as &amp;$array) { break; }<br />
		foreach (split(&#8217;,', $sortby) as $key) {<br />
			$key = trim($key);<br />
			if (strlen($key)&gt;5 &amp;&amp; substr($key, -5)==&#8217; DESC&#8217;) {<br />
				$asc = false;<br />
				$key = substr($key, 0, strlen($key)-5);<br />
			} else {<br />
				$asc = true;<br />
			}</p>
<p>			if(is_numeric($array[$key])) {<br />
				$code .= &#8220;if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] &#8221; . (($asc)?&#8221;) . &#8221; \$b['$key']) ? -1 : 1 )) ) return \$c;&#8221;;<br />
			} else {<br />
				$code .= &#8220;if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return &#8221; . (($asc)?&#8221;:&#8217;-') . &#8220;\$c;\n&#8221;;<br />
			}<br />
		}<br />
		$code .= &#8216;return $c;&#8217;;<br />
		$func = $funcs[$sortby] = create_function(&#8217;$a, $b&#8217;, $code);<br />
	} else {<br />
		$func = $funcs[$sortby];<br />
	}</p>
<p>	return uasort($data, $func);<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Victor</title>
		<link>http://php.southpark.com.ua/2007/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/comment-page-1/#comment-551</link>
		<dc:creator>Victor</dc:creator>
		<pubDate>Thu, 06 Mar 2008 12:48:40 +0000</pubDate>
		<guid isPermaLink="false">http://php.southpark.com.ua/2007/10/17/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/#comment-551</guid>
		<description>В коде функции ошибочка:
if ($asc) {
  if(is_numeric($array[$key])) {
    $code .= "if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] " . (($asc)?'') . " \$b['$key']) ? -1 : 1 )) ) return \$c;";
  } else {
    $code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return " . (($asc)?'':'-') . "\$c;\n";
  }
}

здесь лишний if ($asc) {...} надо так:

if(is_numeric($array[$key])) {
  $code .= "if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] " . (($asc)?'') . " \$b['$key']) ? -1 : 1 )) ) return \$c;";
} else {
  $code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return " . (($asc)?'':'-') . "\$c;\n";
}

заметил когда передавал DESC. У себя исправил и использую.
Спасибо за функцию!</description>
		<content:encoded><![CDATA[<p>В коде функции ошибочка:<br />
if ($asc) {<br />
  if(is_numeric($array[$key])) {<br />
    $code .= &#8220;if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] &#8221; . (($asc)?&#8221;) . &#8221; \$b['$key']) ? -1 : 1 )) ) return \$c;&#8221;;<br />
  } else {<br />
    $code .= &#8220;if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return &#8221; . (($asc)?&#8221;:&#8217;-') . &#8220;\$c;\n&#8221;;<br />
  }<br />
}</p>
<p>здесь лишний if ($asc) {&#8230;} надо так:</p>
<p>if(is_numeric($array[$key])) {<br />
  $code .= &#8220;if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] &#8221; . (($asc)?&#8221;) . &#8221; \$b['$key']) ? -1 : 1 )) ) return \$c;&#8221;;<br />
} else {<br />
  $code .= &#8220;if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return &#8221; . (($asc)?&#8221;:&#8217;-') . &#8220;\$c;\n&#8221;;<br />
}</p>
<p>заметил когда передавал DESC. У себя исправил и использую.<br />
Спасибо за функцию!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: \/!&#124;</title>
		<link>http://php.southpark.com.ua/2007/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/comment-page-1/#comment-550</link>
		<dc:creator>\/!&#124;</dc:creator>
		<pubDate>Thu, 06 Mar 2008 12:47:48 +0000</pubDate>
		<guid isPermaLink="false">http://php.southpark.com.ua/2007/10/17/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/#comment-550</guid>
		<description>В коде функции ошибочка:
if ($asc) {
  if(is_numeric($array[$key])) {
    $code .= "if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] " . (($asc)?'') . " \$b['$key']) ? -1 : 1 )) ) return \$c;";
  } else {
    $code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return " . (($asc)?'':'-') . "\$c;\n";
  }
}

здесь лишний if ($asc) {...} надо так:

if(is_numeric($array[$key])) {
  $code .= "if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] " . (($asc)?'') . " \$b['$key']) ? -1 : 1 )) ) return \$c;";
} else {
  $code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return " . (($asc)?'':'-') . "\$c;\n";
}

заметил когда передавал DESC. У себя исправил и использую.
Спасибо за функцию!</description>
		<content:encoded><![CDATA[<p>В коде функции ошибочка:<br />
if ($asc) {<br />
  if(is_numeric($array[$key])) {<br />
    $code .= &#8220;if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] &#8221; . (($asc)?&#8221;) . &#8221; \$b['$key']) ? -1 : 1 )) ) return \$c;&#8221;;<br />
  } else {<br />
    $code .= &#8220;if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return &#8221; . (($asc)?&#8221;:&#8217;-') . &#8220;\$c;\n&#8221;;<br />
  }<br />
}</p>
<p>здесь лишний if ($asc) {&#8230;} надо так:</p>
<p>if(is_numeric($array[$key])) {<br />
  $code .= &#8220;if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] &#8221; . (($asc)?&#8221;) . &#8221; \$b['$key']) ? -1 : 1 )) ) return \$c;&#8221;;<br />
} else {<br />
  $code .= &#8220;if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return &#8221; . (($asc)?&#8221;:&#8217;-') . &#8220;\$c;\n&#8221;;<br />
}</p>
<p>заметил когда передавал DESC. У себя исправил и использую.<br />
Спасибо за функцию!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Владимир Лучанинов</title>
		<link>http://php.southpark.com.ua/2007/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/comment-page-1/#comment-538</link>
		<dc:creator>Владимир Лучанинов</dc:creator>
		<pubDate>Sat, 23 Feb 2008 23:36:49 +0000</pubDate>
		<guid isPermaLink="false">http://php.southpark.com.ua/2007/10/17/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/#comment-538</guid>
		<description>Эх... Таки деградирует молодое поколение  :wink:
Надо либо учить матчасть, либо не париться и просто копипастить</description>
		<content:encoded><![CDATA[<p>Эх&#8230; Таки деградирует молодое поколение  <img src='http://php.southpark.com.ua/wp-includes/images/smilies/icon_wink.gif' alt=':wink:' class='wp-smiley' /><br />
Надо либо учить матчасть, либо не париться и просто копипастить</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Владимир Лучанинов</title>
		<link>http://php.southpark.com.ua/2007/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/comment-page-1/#comment-537</link>
		<dc:creator>Владимир Лучанинов</dc:creator>
		<pubDate>Sat, 23 Feb 2008 23:34:51 +0000</pubDate>
		<guid isPermaLink="false">http://php.southpark.com.ua/2007/10/17/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/#comment-537</guid>
		<description>Сортировка не А-Я, а Я-А</description>
		<content:encoded><![CDATA[<p>Сортировка не А-Я, а Я-А</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: SeMeN</title>
		<link>http://php.southpark.com.ua/2007/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/comment-page-1/#comment-531</link>
		<dc:creator>SeMeN</dc:creator>
		<pubDate>Sat, 23 Feb 2008 14:56:06 +0000</pubDate>
		<guid isPermaLink="false">http://php.southpark.com.ua/2007/10/17/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/#comment-531</guid>
		<description>Что такое DESC ?</description>
		<content:encoded><![CDATA[<p>Что такое DESC ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: SeMeN</title>
		<link>http://php.southpark.com.ua/2007/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/comment-page-1/#comment-530</link>
		<dc:creator>SeMeN</dc:creator>
		<pubDate>Sat, 23 Feb 2008 14:54:20 +0000</pubDate>
		<guid isPermaLink="false">http://php.southpark.com.ua/2007/10/17/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/#comment-530</guid>
		<description>А я эту функцию не понял, честно говоря. Вот если бы кто-то обьяснил что тут к чему.</description>
		<content:encoded><![CDATA[<p>А я эту функцию не понял, честно говоря. Вот если бы кто-то обьяснил что тут к чему.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Денис Радченко</title>
		<link>http://php.southpark.com.ua/2007/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/comment-page-1/#comment-35</link>
		<dc:creator>Денис Радченко</dc:creator>
		<pubDate>Sat, 27 Oct 2007 23:53:53 +0000</pubDate>
		<guid isPermaLink="false">http://php.southpark.com.ua/2007/10/17/sortirovka-massiva-po-polyu-ili-uasort-na-steroidax/#comment-35</guid>
		<description>Спасибо за статью. Иногда требуется сделать что-то подобное, обычно обходился по деревенски: foreach и запись в новый массив. Теперь буду использовать эту функцию</description>
		<content:encoded><![CDATA[<p>Спасибо за статью. Иногда требуется сделать что-то подобное, обычно обходился по деревенски: foreach и запись в новый массив. Теперь буду использовать эту функцию</p>
]]></content:encoded>
	</item>
</channel>
</rss>
