php - dizi yeniden?

4 Cevap php

Ben temizlemeye çalışıyorum bazı verileri, "miras" ettik. Dizi görünüşte, hiçbir anahtarları vardı, bir veritabanından olduğunu.

Dizinin kendisi, oldukça uzun, bu yüzden bu yazı için bir şeyler basitleştirilmesi ediyorum ...

[0] => Array
        (
            [id] => 2
            [uid] => 130
            [eid] => 8
            [ename] => Standard
            [eaction] => Check
        )
[1] => Array
        (
            [id] => 2
            [uid] => 110
            [eid] => 8
            [ename] => Standard
            [eaction] => Check
        )
[2] => Array
        (
            [id] => 2
            [uid] => 200
            [eid] => 8
            [ename] => Standard
            [eaction] => Check
        )

Ben bu kadar dizi çok boyutlu ve ename göre gruplandırılmış etrafında şeyleri kaydırmaya çalışıyorum:

[0] => Array
        (
            [Standard] => Array
            (
                 [id] => 2
                 [uid] => 130
                 [eid] => 8
                 [eaction] => Check
             ) 
        )
[0] => Array
        (
            [Standard] => Array
            (
                 [id] => 2
                 [uid] => 130
                 [eid] => 8
                 [eaction] => Check
             ) 
        )
[0] => Array
        (
            [Standard] => Array
            (
                 [id] => 2
                 [uid] => 130
                 [eid] => 8
                 [eaction] => Check
             ) 
        )

Herkes böyle bir şey yapmak nasıl biliyor?

4 Cevap

Sen usort() to sort an array by a user-defined function. That function could compare the ename alanları kullanabilirsiniz. Sonra sadece basit bir dönüşüm var. Gibi:

usort($array, 'cmp_ename');

function cmp_ename($a, $b) {
  return strcmp($a['ename'], $b['ename']);
}

ve daha sonra:

$output = array();
foreach ($array as $v) {
  $ename = $v['ename'];
  unset($v['ename']);
  $output[] = array($ename => $v);
}
$outputarray = array();

foreach($inputarray as $value) {
  $outputarray[] = array($value['ename'] => $value);
}

Lütfen örnekler (bir kenara 'sonuç' örnek geçerli değil anahtarı 0 birden fazla şeyler tüm ... sahip olduğu gerçeği belirtmek görünüyor ne başarmak istiyorum. Ben onları 0,1,2 et numara gerekiyordu varsayarak yaşıyorum saire). Ancak, bunu yapıyor gibi görünüyor hiç bir amaca hizmet eder bir boyut ekliyor beri, bu alıyoruz yarar merak var. Dikkate almak başka şeyler varsa belki sizin örnek açıklamak?

Bu sizin için soruyorsun ne olduğunu tahmin ediyorum:

function array_group_by($input, $field) {
  $out = array();
  foreach ($input as $row) {
    if (!isset($out[$row[$field]])) {
      $out[$row[$field]] = array();
    }
    $out[$row[$field]][] = $row;
  }
  return $out;
}

Ve kullanımı:

var_dump(array_group_by($input, 'ename'));

philfreo haklıydı ama biraz kapalı oldu. Onun kodu ile bir ['ename'] ile bir dizi elemanı karşılaşırsanız her zaman zaten geçtiniz biri olarak aynı, aynı bir önceki elemandan veri üzerine ['ename'] olacaktır

Eğer böyle bir şey yapmak isteyebilirsiniz:

$output = array();
foreach ($YOURARRAY as $value) {
    $output[$value['ename']][] = $value;
}
var_dump($output); // to check out what you get