Pagina 1 din 1

count la elemente in array multidimenional

Scris: Joi Apr 21, 2016
de trif
Buna ziua,
Am o problema si nu stiu cum sa o rezolv.
Am un array multidimensional si nu stiu cum sa fac count pe o anumita ramura.
Ex.:

Cod: Selectaţi tot

array (size=1)
  38 => 
    array (size=4)
      '' => 
        array (size=1)
          '' => 
            array (size=2)
              833 => 
                array (size=8)
                  'idP' => string '38' (length=2)
                  'denumireP' => string 'p 01-1111222' (length=15)
                  'idO' => null
                  'denumireO' => null
                  'idC' => null
                  'denumireC' => null
                  'idS' => string '833' (length=3)
                  'denumireS' => string 's1' (length=19)
              880 => 
                array (size=8)
                  'idP' => string '38' (length=2)
                  'denumireP' => string 'p 01-1111222' (length=15)
                  'idO' => null
                  'denumireO' => null
                  'idC' => null
                  'denumireC' => null
                  'idS' => string '880' (length=3)
                  'denumireS' => string 's2' (length=7)
      4 => 
        array (size=3)
          3 => 
            array (size=1)
              813 => 
                array (size=8)
                  'idP' => string '38' (length=2)
                  'denumireP' => string 'p 01-1111222' (length=15)
                  'idO' => string '4' (length=1)
                  'denumireO' => string '1/1112' (length=6)
                  'idC' => string '3' (length=1)
                  'denumireC' => string 'testpath1' (length=9)
                  'idS' => string '813' (length=3)
                  'denumireS' => string 's12' (length=16)
          4 => 
            array (size=1)
              160 => 
                array (size=8)
                  'idP' => string '38' (length=2)
                  'denumireP' => string 'p 01-1111222' (length=15)
                  'idO' => string '4' (length=1)
                  'denumireO' => string '1/1112' (length=6)
                  'idC' => string '4' (length=1)
                  'denumireC' => string 'C1234' (length=5)
                  'idS' => string '160' (length=3)
                  'denumireS' => string 'a22' (length=25)
          5 => 
            array (size=1)
              812 => 
                array (size=8)
                  'idP' => string '38' (length=2)
                  'denumireP' => string 'p 01-1111222' (length=15)
                  'idO' => string '4' (length=1)
                  'denumireO' => string '1/1112' (length=6)
                  'idC' => string '5' (length=1)
                  'denumireC' => string 'q1' (length=2)
                  'idS' => string '812' (length=3)
                  'denumireS' => string 's22' (length=16)
      5 => 
        array (size=3)
          1 => 
            array (size=1)
              159 => 
                array (size=8)
                  'idP' => string '38' (length=2)
                  'denumireP' => string 'p 01-1111222' (length=15)
                  'idO' => string '5' (length=1)
                  'denumireO' => string '2/1112' (length=6)
                  'idC' => string '1' (length=1)
                  'denumireC' => string 'test1' (length=5)
                  'idS' => string '159' (length=3)
                  'denumireS' => string 'ss11' (length=25)
          4 => 
            array (size=2)
              814 => 
                array (size=8)
                  'idP' => string '38' (length=2)
                  'denumireP' => string 'p 01-1111222' (length=15)
                  'idO' => string '5' (length=1)
                  'denumireO' => string '2/1112' (length=6)
                  'idC' => string '4' (length=1)
                  'denumireC' => string 'C1234' (length=5)
                  'idS' => string '814' (length=3)
                  'denumireS' => string 'sa11' (length=16)
              816 => 
                array (size=8)
                  'idP' => string '38' (length=2)
                  'denumireP' => string 'p 01-1111222' (length=15)
                  'idO' => string '5' (length=1)
                  'denumireO' => string '2/1112' (length=6)
                  'idC' => string '4' (length=1)
                  'denumireC' => string 'C1234' (length=5)
                  'idS' => string '816' (length=3)
                  'denumireS' => string '121ss' (length=16)
          5 => 
            array (size=1)
              828 => 
                array (size=8)
                  'idP' => string '38' (length=2)
                  'denumireP' => string 'p 01-1111222' (length=15)
                  'idO' => string '5' (length=1)
                  'denumireO' => string '2/1112' (length=6)
                  'idC' => string '5' (length=1)
                  'denumireC' => string 'q1' (length=2)
                  'idS' => string '828' (length=3)
                  'denumireS' => string '221' (length=20)
      6 => 
        array (size=1)
          3 => 
            array (size=1)
              831 => 
                array (size=8)
                  'idP' => string '38' (length=2)
                  'denumireP' => string 'p 01-1111222' (length=15)
                  'idO' => string '6' (length=1)
                  'denumireO' => string '3/1112' (length=6)
                  'idC' => string '3' (length=1)
                  'denumireC' => string 'testpath1' (length=9)
                  'idS' => string '831' (length=3)
                  'denumireS' => string 'asda11' (length=25)
Am facut asa

Cod: Selectaţi tot

$or[$p][$o][$c][$s]['idp']=$row_result['id_p'];
$or[$p][$o][$c][$s]['denumirep']=$row_result['denumire_p'];

$or[$p][$o][$c][$s]['ido']=$row_result['id_o'];
$or[$p][$o][$c][$s]['denumireo']=$row_result['do'];

$or[$p][$o][$c][$s]['idCotatie']=$row_result['id_c'];
$or[$p][$o][$c][$s]['denumireCotatie']=$row_result['denumire_c'];

$or[$p][$o][$c][$s]['ids']=$row_result['id_s'];
$or[$p][$o][$c][$s]['denumires']=$row_result['denumire_s'];
Si apoi foreach

Cod: Selectaţi tot

 foreach ($or as $p) {
                foreach ($p as $o){
                    foreach ($o as $c){
                        foreach ($c as $s)
                       
Ceea ce vreau este ca sa fac count pe fiecare ramura.
Am facut un tabel html cu datele din select dar doresc sa scriu cu rowspan in locurile unde este nevoie.

Sper ca am explicat cat de bine.
Daca aveti intrebari si rezolvari le astept.

Astept raspuns.
Multumesc anticipat.
Cu stima Trif

count la elemente in array multidimenional

Scris: Joi Apr 21, 2016
de MarPlo
La ce vrei sa faci count, ce elemente din acel array sa numerotezi? Cate sub-array ar fiecare array sau cum?
Daca se poate, sa dai un exemplu ce sa rezulte; si sa pui array-ul asa cum e in php, sau cum rezulta cu functia var_export($array); ca sa poata fi testat.

count la elemente in array multidimenional

Scris: Vin Apr 22, 2016
de trif
Buna ziua,
am dat var_export si mi-a dat asta

Cod: Selectaţi tot

  array (
  ),
  38 => 
  array (
    'nivel1' => 'nivel 01-2014',
    'id_nivel' => '38',
    '' => 
    array (
      'nivel2' => NULL,
      'id_nivel2' => NULL,
      '' => 
      array (
        'nivel3' => NULL,
        'id_nivel3' => NULL,
        382 => 
        array (
          'nivel4' => 's2',
          'id_nivel4' => '382',
        ),
        545 => 
        array (
          'nivel4' => 's32',
          'id_nivel4' => '545',
        ),
        811 => 
        array (
          'nivel4' => 's11',
          'id_nivel4' => '811',
        ),
        815 => 
        array (
          'nivel4' => '1ss',
          'id_nivel4' => '815',
        ),
        833 => 
        array (
          'nivel4' => '3321',
          'id_nivel4' => '833',
        ),
        840 => 
        array (
          'nivel4' => 'adsada',
          'id_nivel4' => '840',
        ),
        880 => 
        array (
          'nivel4' => 'sC123_1',
          'id_nivel4' => '880',
        ),
      ),
      6 => 
      array (
        'nivel3' => 'Quote',
        'id_nivel3' => '6',
        888 => 
        array (
          'nivel4' => 'st_011111',
          'id_nivel4' => '888',
        ),
      ),
    ),
    0 => 
    array (
      'nivel2' => NULL,
      'id_nivel2' => '0',
      3 => 
      array (
        'nivel3' => 'testpath1',
        'id_nivel3' => '3',
        883 => 
        array (
          'nivel4' => '11211cc',
          'id_nivel4' => '883',
        ),
      ),
      4 => 
      array (
        'nivel3' => 'C1234',
        'id_nivel3' => '4',
        881 => 
        array (
          'nivel4' => 'sC123_2',
          'id_nivel4' => '881',
        ),
      ),
    ),
    4 => 
    array (
      'nivel2' => '1/2016',
      'id_nivel2' => '4',
      3 => 
      array (
        'nivel3' => 'testpath1',
        'id_nivel3' => '3',
        813 => 
        array (
          'nivel4' => 'asaaaa22',
          'id_nivel4' => '813',
        ),
      ),
      4 => 
      array (
        'nivel3' => 'C1234',
        'id_nivel3' => '4',
        160 => 
        array (
          'nivel4' => 'aa111ss',
          'id_nivel4' => '160',
        ),
      ),
    ),
    5 => 
    array (
      'nivel2' => '2/2016',
      'id_nivel2' => '5',
      4 => 
      array (
        'nivel3' => 'C1234',
        'id_nivel3' => '4',
        814 => 
        array (
          'nivel4' => 'aas22',
          'id_nivel4' => '814',
        ),
        816 => 
        array (
          'nivel4' => 'adasda11',
          'id_nivel4' => '816',
        ),
      ),
      5 => 
      array (
        'nivel3' => 'q1',
        'id_nivel3' => '5',
        828 => 
        array (
          'nivel4' => '11122',
          'id_nivel4' => '828',
        ),
      ),
    ),
    6 => 
    array (
      'nivel2' => '3/2016',
      'id_nivel2' => '6',
      3 => 
      array (
        'nivel3' => 'testpath1',
        'id_nivel3' => '3',
        831 => 
        array (
          'nivel4' => 'adssad112ss',
          'id_nivel4' => '831',
        ),
      ),
    ),
    8 => 
    array (
      'nivel2' => '5/2016',
      'id_nivel2' => '8',
      4 => 
      array (
        'nivel3' => 'C1234',
        'id_nivel3' => '4',
        882 => 
        array (
          'nivel4' => 'sC123_3',
          'id_nivel4' => '882',
        ),
      ),
    ),
    111 => 
    array (
      'nivel2' => NULL,
      'id_nivel2' => '111',
      3 => 
      array (
        'nivel3' => 'testpath1',
        'id_nivel3' => '3',
        884 => 
        array (
          'nivel4' => 'saa',
          'id_nivel4' => '884',
        ),
        885 => 
        array (
          'nivel4' => 'as222',
          'id_nivel4' => '885',
        ),
        886 => 
        array (
          'nivel4' => 'adsa222',
          'id_nivel4' => '886',
        ),
      ),
    ),
  )
am 4 nivele de array (nivel1, nivel2, nivel3 si nivel4)
vreau ca sa fac rowspan si doresc sa stiu
1. nivelul 1 cate nivele are 4 in functie de nivelul 1;
2. nivelul 2 cate nivele are 4 in functie de nivelul 2;
3. nivelul 3 cate nivele are 4 in functie de nivelul 3.

tabelul ar trebui sa fie Imagine
am facut sa apara asa cum trebuie dar trebuie sa stiu rowspan-urile si counturile pe fiecare nivel.

Am mai incercat dar tot nu reusit.

Astept raspuns.

Cu stima Trif

Count la elemente in array multidimenional

Scris: Vin Apr 22, 2016
de MarPlo
Vezi daca iti e de folos functia countKeys() din acest exemplu. Returneaza numarul de elemente cu o anume cheie din array-ul multidimensional transmis.
Cu ea poti numara de exemplu cate elemente 'nivel4' sunt in tot array-ul (sau cate cu 'nivel3').
Rezultatul dat de ea poti sa-l imparti sa calculezi cate "rowspan" vrei la fiecare nivel.

Cod: Selectaţi tot

// return the number or items with key of $key in $arr
function countKeys($arr, $key, $nr=0){
  if(is_array($arr)){
    foreach($arr AS $k=>$v){
      if(is_array($v)) $nr = countKeys($v, $key, $nr);
      else if($k == $key) $nr++;
    }
  }
  return $nr;
}

//multi-dimensional array
$arr =[
  0 =>[],
  38 =>[
    'nivel1' =>'nivel 01-2014',
    'id_nivel' =>'38',
    '' =>[
      'nivel2' =>NULL,
      'id_nivel2' =>NULL,
      '' =>[
        'nivel3' =>NULL,
        'id_nivel3' =>NULL,
        382 =>['nivel4' =>'s2', 'id_nivel4' =>'382'],
        545 =>['nivel4' =>'s32', 'id_nivel4' =>'545'],
        811 =>['nivel4' =>'s11', 'id_nivel4' =>'811'],
      ]
    ],
    0 =>[
      'nivel2' =>NULL,
      'id_nivel2' =>'0',
      3 =>[
        'nivel3' =>'testpath1',
        'id_nivel3' =>'3',
        883 =>['nivel4' =>'11211cc', 'id_nivel4' =>'883'],
      ],
      4 =>[
        'nivel3' =>'C1234',
        'id_nivel3' =>'4',
        881 =>['nivel4' =>'sC123_2', 'id_nivel4' =>'881']
      ]
    ]
  ]
];

//get number of keys 'nivel4' in $arr
$k_nvl4 = countKeys($arr, 'nivel4');
echo $k_nvl4;  // 5 

count la elemente in array multidimenional

Scris: Vin Apr 22, 2016
de trif
Multumesc pentru raspuns.

merge pentru prima coloana dar dupaia la a doua coloana nu mai merge ca trebuie sa ii zic sa tina cont de colona 1 adica nivelul 1. pt ca nivelul 2 este de mai multe ori dar diferit in functie de nivelul1.

Asta cum as mai mutea sa o fac?

Cu stima Trif

count la elemente in array multidimenional

Scris: Vin Apr 22, 2016
de MarPlo
Nu stiu. Poate trebuie sa faci niste calcule aritmetice, adica la coloana 2 imparti numarul total la 2 (sau cat vrei).

count la elemente in array multidimenional

Scris: Vin Apr 22, 2016
de trif
Multumesc pentru raspuns.
O sa vad eu ce fac.

Cu stima Trif