Frage

Ich habe folgendes Problem. Ich habe die Zahlen 1/2/3/4/5/6 und ich will sie in zwei Gruppen 1/3/5 und 2/4/6 trennen. Die Auswahl muss stattfinden, die Position basiert. Dieser Teil funktioniert ok. Das Problem kommt, wenn ich zu einer Gruppe möchte, dass sie wieder, wenn ich die implodieren Funktion verwenden; es sieht nur die letzte Nummer, die gespeichert wurde. Ich weiß, es hat etwas mit mir mit dieser Notation zu tun (da die Menge der Zahlen, die ich wählte diese Art und Weise variiert jedes Mal zu klassifizieren):

$q++;
$row0 = $row0 + 2;
$row1 = $row1 + 2;

, aber ich kann nicht einen Weg, es zu beheben oder einen anderen Weg, um das gleiche Ergebnis zu erhalten. Hoffentlich jemand hier kann mir in die richtige Richtung weisen. Ich verließ den vollständigen Code unten.


<?
$string = "1/2/3/4/5/6";
$splitted = explode("/",$string);
$cnt = count($splitted);
$q=0;
$row0=0;
$row1=1;
while($cnt > 2*$q)
{
  $p_row = implode(array($splitted[$row0]));
  echo "$p_row <br>";
  $i_row = implode(array($splitted[$row1]));
  echo "$i_row <br>";

  $q++;
  $row0 = $row0 + 2;
  $row1 = $row1 + 2;
}
$out = "implode(',', $i_row)";
var_dump($out);
?>

War es hilfreich?

Lösung

Sie können das Array in Gruppen aufgeteilt auf Schleifenindex mit %. Setzt jede Gruppe in separaten Arrays. Hier ist Beispiel:

<?php
    $string = "1/2/3/4/5/6";
    $splitted = explode("/",$string);
    $group_odd = array();  ## all odd elements of $splitted come here
    $group_even = array(); ## all even elements of $splitted come here
    for ($index = 0; $index < count($splitted); ++$index) {
        ## if number is divided by 2 with rest then it's odd
        ## but we've started calculation from 0, so we need to add 1
        if (($index+1) % 2) { 
            $group_odd[] = $splitted[$index];
        }
        else {
            $group_even[] = $splitted[$index];
        }
    }
    echo implode('/', $group_odd), "<br />";  ## outputs "1/3/5<br />"
    echo implode('/', $group_even), "<br />"; ## outputs "2/4/6<br />"
    print_r($group_odd);
    print_r($group_even);
?>

Andere Tipps

ich missread das Problem scheint es. Stattdessen ich diese Optimierung geben.

$string = "1/2/3/4/5/6";
$splitted = explode("/", $string);
$group = array();
for ($index = 0, $t = count($splitted); $index < $t; ++$index) { 
    $group[$index & 1][] = $splitted[$index];
} 
$oddIndex = $group[0]; //start with index 1
$evenIndex = $group[1]; //start with index 2

echo "odd index:  " 
    . implode('/', $oddIndex) 
    . "\neven index: " 
    . implode('/', $evenIndex) 
    . "\n";

Auf der Grundlage ihrer Position? So, Split auf der Grundlage der Gleichmäßigkeit / oddness ihres Index im Array?

So etwas wie das?

<?php

$string = "1/2/3/4/5/6";

list( $evenKeys, $oddKeys ) = array_split_custom( explode( '/', $string ) );

echo '<pre>';
print_r( $evenKeys );
print_r( $oddKeys );

function array_split_custom( array $input )
{
  $evens = array();
  $odds = array();
  foreach ( $input as $index => $value )
  {
    if ( $index & 1 )
    {
      $odds[] = $value;
    } else {
      $evens[] = $value;
    }
  }
  return array( $evens, $odds );
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top