2009-09-10 10 views
8

aquí está mi código: http://www.pcgage.net/code.zip (lo siento, pegar el código provocó que realmente se estropeara, incluso usando el contenedor de código).php: cómo agregar un bucle impar/par en el array

Desplazarse hasta la línea: 160 (a 174): este es el ciclo en cuestión. quiero hacerlo así que esta es la parte par, y luego un poco de código para hacer una parte impar, por lo que el ciclo se repite en este orden. La razón es que quiero cambiar el contenido de este ciclo alternativamente.

No soy un codificador, así que lo mejor que podría hacer es publicar el nuevo código y lo agregaré en donde me dices también, de lo contrario me perderé :)

Esperanza que tiene sentido, si no se puede comprobar un post anterior sobre este tema que explica por qué necesito esto (después de descubrir que css por sí sola no puede resolver mi problema): css/php: how to solve this div float problem/odd even loop in array

este es el bucle:

} 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

No estoy seguro exactamente lo que estás preguntando, pero encontré tu código gracias a su edición de la primera publicación (línea 320 más o menos por algún motivo en mi editor, muchas líneas nuevas en su código). Proporciono dos correcciones dependiendo de lo que me pides, que no estoy del todo claro, pero esta solución debería funcionar a menos que haya pasado por alto un tercer problema. – scragar

+0

@scragar, has ayudado a avanzar, pero parece que hay un problema, ver arriba. – Jim

+0

¡realmente debería usar un motor de plantillas! está estropeando el código y el diseño –

Respuesta

8

No he revisado el código, pero si está usando una variante ble para contar el número de bucle que puede hacer:

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

EDITAR (1): Miré a la sección que se está ejecutando en, y ahora tengo otro problema, estoy seguro de cómo se está juzgando lo que debe par o no, por lo que propongo dos respuestas:

1: extraño bucle 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: número ID Odd:

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

desearía tener la suficiente confianza para tratar de poner esto en el lugar correcto, pero no lo estoy. Desde entonces he puesto el código del lazo en la publicación, espero que pueda ayudar a mostrarme dónde poner esto, ¡gracias! – Jim

+0

debo haber contado con algunas líneas vacías en allí, buscar esta línea de comentario: // todos los demás puestos, excepto el actual puesto es este bucle. – Jim

+0

entiendo el paso 2, simplemente no el paso 1. Supongamos que reemplazaré todo de/* Rellene el conjunto de la lista de publicaciones */a // tenemos la publicación actual y se mostrará el enlace - para su nuevo código, ¿qué haría? ser entonces? Lo siento, no soy bueno con php :( – Jim

34

Las tres formas son

Modulo

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

voltear valor booleano

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

    $even = !$even; 
} 

y mencionó operador booleano

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

El más rápido es el operador booleano. Pero el más robusto es el método de volteo si tiene números muy diferentes (como ejecutar los números de identificación y algunos faltan).

+0

mientras Estoy seguro de que todo esto funcionará, no soy un programador, así que para modificar el código para que funcione en mi script, bueno, no tengo ni idea. Gracias. – Jim

+0

gracias aquí también ... – Peanuts

+0

Gracias aquí también =) –

0

¿Está seguro de que $ findpost-> ID contiene números secuenciales?

Se podría reemplazar el if/else con s comunicado ternaria corto como este:

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

Esto añadiría un lado de la 'izquierda' en primer lugar.

2

Si alguna vez se elimina un artículo que podría estar en problemas - su código asume que corre ID (par, impar, par, impar), etc.

Una mejor idea sería crear un objeto iterador separada para alimentar usted los valores necesarios en cada paso.Esto es lo que yo uso:

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; } 
} 

entonces su salida se simplifica a

$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

suena genial, pero todo esto tiene que ser complejo para alguien que no codifica (yo). A menos que pueda obtener la actualización del archivo php por alguien y publicarla, nunca conseguiré que esto funcione :( – Jim

+0

He corregido el archivo en http://pastebin.com/m2606fee0 para ti, como puedes ver, es solo una cuestión de cortar y pegar en los lugares apropiados. Espero que ayude. –

5

usando condiciones en el interior del bucle:

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

Este es un enfoque muy dulce. – Banago

+0

enfoque súper limpio –

0

Get EvenArray y 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]; 
     } 
    }