Array nach bestimmten Muster teilen

Breuker

Erfahrenes Mitglied
Hi!

Ich sitze nun seit einiger Zeit an einem Array Problem und bekomme es nicht hin :(
Ich habe folgenden Array:

PHP:
Array
(
    [0] => 69
    [1] => 76
    [2] => 83
    [3] => 156
    [4] => 163
    [5] => 170
    [6] => 177
    [7] => 255
    [8] => 262
    [9] => 269
    [10] => 276
    [11] => 283
    [12] => 290
    [13] => 297
    [14] => 304
)

Nun möchte ich diesen Array so gruppieren, dass alle Array-Informationen die die Differnez 7 haben (z.B. 69, 76, 83) zusammen gehören. Dies will ich mit der Funktion array_chunk machen.
Problem ist jedoch, dass es nicht immer 3 Informationen sind die zusammen gehören.
Könnt ihr mir einen Tipp oder Denkansatz geben, wie ich das hinbekommen könnte?

Danke :)

Breuker
 
Nur ein Tipp?
Ich hätte da schon die lösung:
Soll das Array dann so aussehen:
PHP:
Array
(
    [0] => Array
        (
            [0] => 163
            [1] => 156
        )
    [1] => Array
        (
            [0] => 262
            [1] => 255
        )
    [2] => Array
        (
            [0] => 69
            [1] => 76
            [2] => 83
        )
    [3] => Array
        (
            [0] => 156
            [1] => 163
            [2] => 170
            [3] => 177
        )
    [4] => Array
        (
            [0] => 255
            [1] => 262
            [2] => 269
            [3] => 276
            [4] => 283
            [5] => 290
            [6] => 297
            [7] => 304
        )
)

Wenn ja, dann ist her deine Funtion:
PHP:
function myArray_chunk($array, $x){
  $values = array_values($array);
  $return = array();
  foreach ($values as $value) {
  	if(array_search($value + $x, $array) || array_search($value - $x, $array)){
  	  $temp = array();
      $temp[] = $value;
      
  	  $y = $value + $x;
    	while($key = array_search($y, $array)){
        $temp[] = $array[$key];
        unset($array[$key]);
    	  $y = $y + $x;
      }
      
    	$y = $value - $x;
    	while($key = array_search($y, $array)){
        $temp[] = $array[$key];
        unset($array[$key]);
    	  $y = $y + $x;
      }
    	$y = $value - $x;
      $return[] = $temp;
    }
  }
  array_multisort($return);
  return $return;
}

Geht nur mit zahlenwerten!
Die Reihenfolge der Elemente vom Array, was sortiert werden soll ist egal,
$array = ist das Array
$x = der Abstand.
 
Ich habe hier nicht alle Werte meines Arrays angegeben. In meinem echten Array habe ich über 50 Werte und da kommen Kombinationen die nicht kommen sollen.
Des weiteren ist mir das schon wichtig, dass die Reihenfolge erhalten bleibt.

Breuker
 
Mein Vorschlag:
PHP:
foreach( $array as $key => $value ) {
	if( $key === 0 || $key > 0 && $array[$key-1] != $value - 7 ) {
		$chunked[] = array();
	}
	$chunked[count($chunked)-1][] = $value;
}
Oder aber:
PHP:
$chunked = array();
foreach( $array as $value ) {
	if( empty($chunked) || count($chunked[count($chunked)-1]) && $chunked[count($chunked)-1][count($chunked[count($chunked)-1])-1] != $value - 7 ) {
		$chunked[] = array();
	}
	$chunked[count($chunked)-1][] = $value;
}
In beiden Fällen ist jedoch notwendig, dass das Array bereits sortiert ist.
 
also mit foreach-schleifen habe ich noch nicht so recht gearbeitet.
also, $array ist klar, das ist mein array. was soll denn das $value sein?
 
Das foreach-Kontrollkonstrukt durchläuft alle Elemente des angegebenen Arrays und speichert den Wert des aktuelle Elements in der angegebenen Variable. Zusätzlich kann auch der Schlüssel des aktuellen Elements in einer Variable gespeichert werden. Schau dir einfach mal die Beispiele im PHP-Handbuch an.
 
$array ist die Quelle sozusagen.
$value ist der Inhalt der gerade durchgenommen wird (bei einer for Schleife vergleichbar mit $array[$i])
Und $key ist der Schlüsselname des aktuellen Array Eintrags.
 
Zurück