Belirli bir değer ile grup çok boyutlu bir dizi?

3 Cevap php

Umarım, bu doğru açıklayabilirim ...

Ben çok boyutlu bir dizi var ve bir tuşlarının değerine göre grup onlara çalışıyorum.

Yani, ben düzeyine göre grup onlara çalışıyorum, ama aslında önceden seviyesini bilemezsiniz. Yani, ben döngü için bir koyun ve $ i

Array (
   [0] => Array (
          [cust] => XT8900
          [type] => standard
          [level] => 1
          )
   [1] => Array (
          [cust] => XT8944
          [type] => standard
          [level] => 1
          )
   [2] => Array (
          [cust] => XT8922
          [type] => premier
          [level] => 3
          )
   [3] => Array (
          [cust] => XT8816
          [type] => permier
          [level] => 3
          )
   [4] => Array (
          [cust] => XT7434
          [type] => standard
          [level] => 7
          )
)

Ne üretmek için umuyorum:

Array (

   [1] => Array (
          [0] => Array (
                    [cust] => XT8900
                    [type] => standard
                    )
          [1] => Array (
                    [cust] => XT8944
                    [type] => standard
                    )
          )

   [3] => Array (
          [2] => Array (
                 [cust] => XT8922
                 [type] => premier
                 )

          [3] => Array (
                 [cust] => XT8816
                 [type] => permier
                 )
          )

   [7] => Array (
          [4] => Array (
                 [cust] => XT7434
                 [type] => standard
                 )
          )
)

3 Cevap

Sen level İlk göre gruplandırmak için onlara ihtiyacımız var

Düzeyi bu dizi ile o grup, önceki öğe ile aynı ise foreach dizisi çek içine döngü kullanın

  $templevel=0;   

  $newkey=0;

  $grouparr[$templevel]="";

  foreach ($items as $key => $val) {
   if ($templevel==$val['level']){
     $grouparr[$templevel][$newkey]=$val;
   } else {
     $grouparr[$val['level']][$newkey]=$val;
   }
     $newkey++;       
  }
print($grouparr);

Çıkış print($grouparr); için umut biçimi gibi görüntüler

Ayrıca deneyebilirsiniz

print($grouparr[7]);

Görüntüler

 [7] => Array (
      [4] => Array (
             [cust] => XT7434
             [type] => standard
             )
      )

Veya

print($grouparr[3]);

Görüntüler

[3] => Array (
      [2] => Array (
             [cust] => XT8922
             [type] => premier
             )

      [3] => Array (
             [cust] => XT8816
             [type] => permier
             )
      )

Eğer girdilerini eklemek gibi en iyi şekilde, ilk dizi bina üzerinde kontrol varsa, sadece başında böyle şeyler ayarlanır.

Sonra tür geçici bir dizi inşa değilse:

foreach ($input_arr as $key => &$entry) {
    $level_arr[$entry['level']][$key] = $entry;
}

Istediğini ve her şeyi birlikte başvurulan formu ile size bırakır.

Ilk etapta böyle dizi oluşturmak olsa mümkünse eğer.

Burada bir fonksiyonu olarak sarılmış özdeş bir sorun için indi çözümdür:

function arraySort($input,$sortkey){
  foreach ($input as $key=>$val) $output[$val[$sortkey]][]=$val;
  return $output;
}

"Seviye" adlı anahtarı tarafından $ myarray sıralamak sadece bunu:

$myArray = arraySort($myArray,'level');

Eğer bir işlev olarak istemiyordu ya, sadece bir kez kullanım için, bu anahtar 'seviye' göre gruplandırılmış $ myArray dan $ myNewArray yaratacak

foreach ($myArray as $key=>$val) $myNewArray[$val['level']][]=$val;