0
foreach ( $this->parent->get_sections(null, $this->parent->author) as $section)
{
  //...
}

私がやろうとしているのは、ループにそれぞれ$sectionを希望の順序で出力させることです。それぞれ$sectionの名前は。で取得できます$section->name$section最初に「セクション2」を出力し、次に「セクション1」を出力したいとします( foreach)の順序ではありません。どうすればそれを強制できますか?適切な方法は、for毎回セクション名をチェックするifを使用したループであると思います。

4

4 に答える 4

4

適切な方法は、を呼び出すときに結果を並べ替えることですparent->get_sections()。これをどのように行うかは、完全にそのクラスとメソッドの実装次第です。foreachソートのためにこれをに変更することforは、私にはコードの臭いのように思えます。


可能な限り技術的な質問に答えるために。

$sections = $this->parent->get_sections(null, $this->parent->author);
$num_sections = count($sections);
for ($i = 0; $i < $num_sections; $i++) {
    // what you do here is up to you $sections[$i]
}
于 2012-09-22T01:58:40.713 に答える
2

特に、特定のセクション数がわからない場合は、返される配列またはオブジェクトに対してusort()動的なカスタムソートを実行してから、既存のコードを利用することができます。get_sections()(これは、for / foreachループで同じことを行うよりも、もう少しエレガントなimoです)。

于 2012-09-22T02:00:07.927 に答える
1
  $section = $this->parent->get_sections(null, $this->parent->author);
  echo $section[2]->name; 
  echo $section[1]->name;//just output the indexes the way you want

降順などで並べ替える場合は、そのように並べ替えてから、forループを使用して表示できます。

于 2012-09-22T01:58:32.117 に答える
1

あなたのコードの構造がわからないので、私は次のようなことをします。

// Get Org Sections
$sections = $this->parent->get_sections(null, $this->parent->author);

// Loop thru sections to get an array of names
foreach ( $sections as $key=>$section)
{ 
$sorted_sections[$section->name] = $key;
}

// Sort Array
//ksort — Sort an array by key
//krsort — Sort an array by key in reverse order
krsort($sorted_sections);

foreach ( $sorted_sections as $section)
{ 
// Orig Code
}
于 2012-09-22T02:20:51.640 に答える