Nasıl dizinin içindeki bir anahtara sahip bir dizi anahtar isim yok

3 Cevap php

Ben bazı veriler var, evet, veri. Bu veriler bir MySQL sorgu geldi ve her zaman, her zaman, 4 öğeleri içerecek. Daha sonra bir web sayfası içinde kullanılmak üzere bir dizi tabloda verileri önbelleğe istiyorum ama sorgudan anahtarları tutmak istiyorum ve her bir boyutlu dizi içinde gruplandırma ayırmak. Ancak dizi aracılığıyla ben belirli bir veri grubunu bulmak istediğiniz her zaman yineleme zaman kazanmak için, ben her zaman, her dört kalemleri içinde ilk anahtar kimlik anahtarı olarak aynı ilk dizinin anahtarlarını aramak istiyorum.

Dakikada ben bu kodu kullanıyorum:

function mysql_fetch_full_result_array($result)  
{  
$table_result=array();  
$r=0;  
while($row = mysql_fetch_assoc($result)){  
    $arr_row=array();  
    $c=0;  
    while ($c < mysql_num_fields($result)) {        
        $col = mysql_fetch_field($result, $c);   
        $arr_row[$col -> name] = $row[$col -> name];           
        $c++;  
    }     
    $table_result[$r] = $arr_row; 
    $r++;  
}     
return $table_result;  
}  

Şu anda 3 benzersiz kullanıcılarını kullanarak bu test ediyorum, bu yüzden bu işlevi biçimde biter gelen sorgu ve veri geri üç satır alıyorum:

 [0]=>  
  . .   [id]   => 1    
  . .   [name] => random name     
  . .   [tel]  => random tel  
  . .   [post] => post code data  
  [1]=>  
  . .   [id]   => 34   
  . .   [name] => random name     
  . .   [tel]  => random tel  
  . .   [post] => post code data  
  [2]=>   
  . .   [id]   => 56   
  . .   [name] => random name      
  . .   [tel]  => random tel  
  . .   [post] => post code data  

Peki nasıl yerine tuşları [0], [1], [2] bana çıkış vermek kodunu değiştirmek için ne yapmalıyım:

  [1]=>  
  . .   [id]   => 1    
  . .   [name] => random name     
  . .   [tel]  => random tel  
  . .   [post] => post code data  
  [34]=>  
  . .   [id]   => 34   
  . .   [name] => random name     
  . .   [tel]  => random tel  
  . .   [post] => post code data  
  [56]=>   
  . .   [id]   => 56   
  . .   [name] => random name      
  . .   [tel]  => random tel  
  . .   [post] => post code data 

Ana Dizi anahtarları numaraları ziyade sayı dizeleri ise ben umursamıyorum ama ben biraz şaşırıp, ben $table_result[$result['id']] = $arr_row; okumak için $table_result[$r] = $arr_row; kısmını değiştirmeyi denedim ama bu sadece çıktılar Bir kişinin bir dizi. Ben başka bir döngüye ihtiyacım olduğunu biliyorum ama bunu yazmak için nasıl çalışmak için mücadele ediyorum.

3 Cevap

Satırı değiştirin:

$table_result[$r] = $arr_row; $r++;
to
$table_result[$arr_row['id']] = $arr_row;

Ve ben bir daha $ r gerek olduğunu sanmıyorum.

Nasıl hakkında:

$table_result = array();
$sql = "SELECT id, name, tel, post FROM sometable";
$res = mysql_query($sql);
if (mysql_error()) {
    die("MySQL error: " . mysql_error());
}

while($row = mysql_fetch_array($res)) {
    $table_result[$row['id']] = $row;
}

Dediğiniz gibi, her dizi elemanı içinde tekrarlanan Kimlik alanını sakıncası yoktur, eğer, o zaman tek tek, satır ve özü alanlar üzerinde döngü için gerek yoktur.

$arr_row[(name of ID field in your result)][$col -> name] = $row[$col -> name]

Bu kimliği olarak dizi anahtarı ayarlamanız gerekir, bu nedenle örneğin, atamanız gerekir:

$arr_row[34]['id'] = 34;
$arr_row[34]['name'] = 'name';
$arr_row[34]['tel'] = 'tel';
$arr_row[34]['post'] = 'post';