php sort


スポンサーリンク

perl から php を考えると php の連装配列のソートほどわかりにくものはない。
どこのサンプルをみてもサンプルデータは決め打ちで実践的じゃない。
$array = array(	'key1' => 'data1',	'key2' => 'data2',	'key3' => 'data3',	'key4' => 'data4');
 
したら、それはどう書けばいいのよっ!!
 
wp で 価格データをキーにして ポストIDを並べてみる。
if (have_posts()) {
	// 入力部
	$array="";
	while (have_posts()){
		the_post();
		global $post;
		// $array[ ソートキー ] = データ; って書き方ね?
		$array[ usces_the_firstPrice('return') ]=$post->ID;
	}
	// ここでソートする。 result には、 sort がうまくいったかいかないか・・・
	// ってソート失敗すんのかよ!ってなもんだけど、とりあえず。結果はそのまま配列の中を並び替えるみたい。
	$result=ksort($array,SORT_NUMERIC);
	// 出力部
	foreach ($array as $key => $val) {
		echo $key." ".$val."<br />";
	}
}
1次元配列を並び替えるのは、PHPでもPERLでもストレートにわかるけど、連装配列はね?
ちなみに上のようなものを perl で書くならば。
while( ・・・ ){
    push(@array,"key<>data<>");
}
foreach(@array){
    ($key,$data)=split(/<>/,$_);
    print $key." ".$data."<br />";
}
かな?
これができれば、WPのデータ出力時の並び替えなんて楽勝というか応用が効くよね?
処理速を無視すれば、いちど全部取り込んで、キーで並び替えて出力とかって面倒なときにつか得る技だ。
事実 welcart とかってこのフィールドでは並び替えられるけど、ここでは、このフィールドは存在しない・・・
みたいな面倒なことになる。
welcart で価格で並び替えようとして反日つぶした。
結局この手で逃げることにした。
if (have_posts()) {
	// 入力部
	$array="";
	while (have_posts()){
		the_post();
		global $post;
		// $array[ ソートキー ] = データ; って書き方ね?
		$array[ usces_the_firstPrice('return') ]=$post->ID;
	}
	// ここでソートする。 result には、 sort がうまくいったかいかないか・・・
	// ってソート失敗すんのかよ!ってなもんだけど、とりあえず。結果はそのまま配列の中を並び替えるみたい。
	$result=ksort($array,SORT_NUMERIC);
	// 出力部
	foreach ($array as $key => $val) {
		echo $key." ".$val."<br />";
	}
	//
	// ↑はそのまま残しとくね?
	//
	// 出力部
	foreach ($array as $key => $val) {
		query_posts('&p='.$val);
		the_post();
			:
		//実際の出力
	}

}

スポンサーリンク