2009-09-10 91 views
8

這裏是我的代碼:http://www.pcgage.net/code.zip(抱歉,粘貼代碼導致它真的很糟糕,即使使用代碼容器)。php:如何添加數組中的奇數/偶數循環

滾動到行:160(到174) - 這是問題的循環。我想使它成爲偶數部分,然後使一些代碼變成奇數部分,所以循環按照這個順序重複。原因是我想交替地改變這個循環的內容。

我不是一個編碼器,所以你能做的最好的事情是張貼新的代碼,我會在你告訴我太添加它,否則我會迷路:)

希望這是有道理的,如果不是你可以檢查這個問題,解釋爲什麼需要這樣的一個早期的崗位(單獨找出該CSS解決不了我的問題後):css/php: how to solve this div float problem/odd even loop in array

這是循環:

} elseif (($findpost->ID) != $id) { 

// all other posts except the current post 

        $serp_list_li[] = '<div class="serial-contain"> 

<div class=""><h5><a href="' . get_permalink($findpost->ID) . '" title="' . $findpost->post_title . '">' . $findpost->post_title . '</a></h5></div> 

<div class="text-align">' . $findpost->post_excerpt . ' </div> 

<div class="date"> ' . mysql2date('M jS, Y', $findpost->post_date) . ' at ' . mysql2date('g:ia', $findpost->post_date) . '</div> 


<div class="comments"><a href="' . get_permalink($findpost->ID) . '#comments" title="' . $findpost->post_title . '"><b>' . $findpost->comment_count . ' Comments</b></a></div> 


</div>' . "\n"; 
       } 



else {    
+0

我不是確定你在問什麼,但我確實發現你的代碼感謝s到第一篇文章的編輯(由於某種原因,在我的編輯器中,第320行左右,代碼中有很多額外的新行)。我提供了兩個修復程序,具體取決於您所要求的內容,這個問題我有點不清楚,但這種解決方案應該可行,除非我錯過了第三個問題。 – scragar 2009-09-10 03:53:48

+0

@scragar,你已經幫助得到了更多,但似乎有問題,請參閱上文。 – Jim 2009-09-10 05:02:00

+0

你真的應該使用模板引擎! 你搞亂了代碼和設計 – 2009-09-10 11:45:06

回答

8

我沒有看過代碼,但是如果它使用的是VAR BLE數環數,你可以這樣做:

for($i=0;$i<$blah;$i++) 
    if($i&1){ 
    // ODD 
    }else{ 
    // EVEN 
    } 

EDIT(1): 我看着你碰到的部分,現在我還有一個問題,我不能確定你是如何判斷又該是奇數或沒有,所以我提出了兩種回答:

1:奇數循環itteration:

/* Populate the post list array */ 
// Add here: 
    $oddLoop = false; 
    foreach ($findposts as $findpost): 
//..... 
if($oddLoop=!$oddLoop){ 
    // code for odd loop numbers 
}else{ 
    // code for even loop numbers 
} 

2:奇數ID號:

} elseif (($findpost->ID) != $id) { 
    if($findpost->ID & 1){ 
     // ODD 
    }else{ 
     //EVEN 
    } 
+0

希望我有足夠的信心去嘗試把它放在正確的地方,但我不是。 我已經把循環代碼放在帖子中,希望可以幫助向我展示這個位置,謝謝! – Jim 2009-09-10 03:36:49

+0

我必須在有一些空行已經算,查找此註釋行: //所有其​​他職位,除了目前的職位 它的這種循環。 – Jim 2009-09-10 03:42:24

+0

我明白第2步,只是不是第1步。假設我將全部替換爲/ *填充帖子列表數組*///我們有當前帖子,鏈接將顯示爲 - 對於您的新代碼,那麼呢?對不起,我不擅長與PHP :( – Jim 2009-09-10 04:00:38

34

的三種方式是

for ($i = 0; $i < 10; $i++) 
{ 
    if ($i % 2 == 0) 
    { 
    echo "even"; 
    } 
    else 
    { 
    echo "odd"; 
    } 
} 

翻轉布爾值

$even = true; 
for ($i = 0; $i < 10; $i++) 
{ 
    if ($even) 
    { 
    echo "even"; 
    } 
    else 
    { 
    echo "odd"; 
    } 

    $even = !$even; 
} 

,並提到布爾運算符

for ($i = 0; $i < 10; $i++) 
{ 
    if ($i & 1 == 0) 
    { 
    echo "even"; 
    } 
    else 
    { 
    echo "odd"; 
    } 
} 

最最快的是布爾運算符。但最強大的是翻轉方法,如果你有非常不同的數字(如通過身份證號碼和一些失蹤)。

+0

而我確定這些都會工作,我不是一個程序員,所以要修改你的代碼在我的腳本中工作,那麼,我很無能,不過,謝謝,儘管如此, – Jim 2009-09-10 05:03:42

+0

也在這裏感謝.. – Peanuts 2011-02-24 23:55:16

+0

感謝這裏以及=) – 2011-07-12 19:32:10

0

您確定$ findpost-> ID包含連續數字嗎?

你可以替換的if/else與S短三元聲明是這樣的:

$side = empty($side) || $side == 'right' ? 'left' : 'right'; 
$serp_list_li[] = '<div class="serial-contain-' . $side . '">' // ...the rest 

這將首先添加一個「左」側。

2

如果你刪除你可能是麻煩的一篇文章 - 你的代碼假定ID運行(奇,偶,奇,偶)等

一個更好的想法是創建一個單獨的迭代器對象養活你在每一步都有必要的價值。下面是我用:

class LoopingPropertyIterator implements Iterator { 
private $startat=0, $position=0; 
private $propertylist=array(
    'boolean' => array(false, true), 
    'day' => array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), 
    'dow' => array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat') 
); 

public function __construct($args, $startat=0) { 
    $this->startat = (int) $startat; 
    $this->position = $this->startat; 

    foreach($args as $name => $arr) 
    $this->__set($name, $arr); 
} 

public function __get($name) { 
    if (!array_key_exists($name, $this->propertylist)) 
    throw new Exception(__METHOD__." unknown property $name"); 

    $t =& $this->propertylist[$name]; 

    if (is_array($t)) 
    return $t[ $this->position % count($t) ]; 
    else 
    return $t; 
} 

public function __set($name, $arr) { 
    $this->propertylist[$name] = $arr; 
} 
public function current() { return $this->position; } 
public function key() { return $this->position; } 
public function next() { ++$this->position; } 
public function rewind() { $this->position=$this->startat; } 
public function valid() { return true; } 
} 

那麼你的輸出簡化爲

$iter = new LoopingPropertyIterator(array(
    'outerclass' => array('serial-contain-right','serial-contain-left'), 
    'innerclass' => array('text-align2','text-align') 
)); 

... 

elseif ($findpost->ID != $id) { 
    $link = get_permalink($firstpost->ID); 
    $title = $findpost->post_title; 
    $datetime = mysql2date('M jS, Y', $findpost->post_date).' at '.mysql2date('g:ia', $findpost->post_date); 

    $serp_list_li[]= 
<<<TEXT 
    <div class="{$iter.outerclass}"> 
     <div class="title"> 
      <h5><a href="{$link}" title="{$title}">{$title}</a></h5> 
     </div> 
     <div class="{$iter->innerclass}">{$findpost->excerpt}</div> 
     <div class="date">{$date}</div> 
     <div class="comments"> 
      <a href="{$link}#comments"> title="{$title}"> 
       <b>{$findpost->comment_count} Comments</b> 
      </a> 
     </div> 
    </div> 
TEXT; 

    $iter->next(); 
} 
+0

上的+1聽起來不錯,但對於不編碼(我)的人來說,這一切都變得複雜。除非我可以通過某人獲得php文件更新併發布回去,否則我永遠不會得到這個工作:( – Jim 2009-09-11 01:48:26

+0

我爲你修補了http://pastebin.com/m2606fee0上的文件 - 正如你所看到的,它只是一個切割和粘貼到合適的地方。希望有幫助。 – 2009-09-11 19:57:19

5

使用情況的內部循環:

$class = 'odd'; 
for(.........) # no problem what kind of loop you are using(for,foreach,while,do) 
{ 
    $class = ($class == 'even' ? 'odd' : 'even'); 
    #some code 
} 
+1

這是一個非常可愛的方法。 – Banago 2013-06-11 16:21:24

+0

超級乾淨的方法 – 2017-06-12 11:08:44

0

獲取EvenArray和OddArray

NSArray *numberArray = [NSArray arrayWithObjects:@1,@2,@3,@4,@6,@8,@10, nil]; 
for (id object in numberArray) 
    { 
     if ([object integerValue] % 2 == 0) 
     { 
      [evenArray addObject:object]; 
     } 
     else 
     { 
      [oddArray addObject:object]; 
     } 
    }