Mit Hilfe zu Gruppeninformationen implodieren von in einer while-Schleife erworben
-
08-07-2019 - |
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);
?>
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 );
}