2010-07-21 3 views
1

J'espère pouvoir expliquer ce que j'essaie de faire - et j'espère vraiment que quelqu'un pourra vous aider! Voici le tableau, je travaille avecPHP: Besoin de fusionner/trier un tableau multidimensionnel basé sur une clé dans la dimension

(
    [0] => Array 
     (
      [city] => Middletown 
      [state] => OH 
      [freq] => 146.610 
      [pl] => 77.0 
      [call] => W8BLV 
      [distance] => 0.0 
      [notes] => ottel 
     ) 

    [1] => Array 
     (
      [city] => Middletown 
      [state] => OH 
      [freq] => 146.715 
      [pl] => 
      [call] => N8COZ 
      [distance] => 0.0 
      [notes] => ct 
     ) 

    [2] => Array 
     (
      [city] => Middletown 
      [state] => OH 
      [freq] => 147.315 
      [pl] => 77.0 
      [call] => W8JEU 
      [distance] => 0.0 
      [notes] => ottel 
     ) 

    [3] => Array 
     (
      [city] => Middletown 
      [state] => OH 
      [freq] => 443.5370 
      [pl] => 118.8 
      [call] => W8MUM 
      [distance] => 0.0 
      [notes] => oe oe 
     ) 

    [4] => Array 
     (
      [city] => Middletown 
      [state] => OH 
      [freq] => 444.4750 
      [pl] => 100.0 
      [call] => AG8Y 
      [distance] => 0.0 
      [notes] => ottel 
     ) 

    [5] => Array 
     (
      [city] => Middletown 
      [state] => OH 
      [freq] => 444.8250 
      [pl] => 77.0 
      [call] => W8BLV 
      [distance] => 0.0 
      [notes] => oel 
     ) 

    [6] => Array 
     (
      [city] => Monroe 
      [state] => OH 
      [freq] => 443.0870 
      [pl] => 
      [call] => KC8ECK 
      [distance] => 4.3 
      [notes] => oep 
     ) 

    [7] => Array 
     (
      [city] => Franklin 
      [state] => OH 
      [freq] => 145.290 
      [pl] => 118.8 
      [call] => WB8ZVL 
      [distance] => 5.5 
      [notes] => o(ca)r 
     ) 

    [8] => Array 
     (
      [city] => Franklin 
      [state] => OH 
      [freq] => 442.4250 
      [pl] => 77.0 
      [call] => WE8N 
      [distance] => 5.5 
      [notes] => Oae(ca) 
     ) 

    [9] => Array 
     (
      [city] => Franklin 
      [state] => OH 
      [freq] => 443.1500 
      [pl] => 118.8 
      [call] => WB8ZVL 
      [distance] => 5.5 
      [notes] => o(ca)r 
     ) 

    [10] => Array 
     (
      [city] => Springboro 
      [state] => OH 
      [freq] => 145.490 
      [pl] => 77.0 
      [call] => W8CYE 
      [distance] => 8.9 
      [notes] => oe 
     ) 

) 

La sortie Je cherche à obtenir doit être quelque chose comme ceci:

$rpt[0] ="Middletown 146.61/77, 146.715, 147.315/77, 443.537/118.8, 444.475/100, 444.825/77"; 
$rpt[1] = "Monroe 443.087"; 
$rpt[2] = "Franklin 145.29/118.8, 442.425/77, 443.15/118.8"; 
$rpt[3] = "Springboro 145.49/77" 

Les champs que je suis plus intéressé par la ville sont, fréq, pl - Et si vous regardez le premier tableau, j'ai supprimé les zéros de fin sur le tableau de sortie. Il y a aussi quelques fois où je devrais utiliser le champ d'appel, et le champ de notes, mais si quelqu'un peut me diriger dans la bonne direction, je serai probablement en mesure de comprendre le reste dont j'ai besoin - le champ d'appel et Le champ notes ne sera pas utilisé souvent. J'ai essayé plusieurs boucles de foreach, mais je suis toujours un novice en PHP - et ce que j'ai fait n'a pas fonctionné correctement, et je suis au point où j'ai besoin d'un peu d'aide.

Merci à l'avance pour l'aide, LeRoy, KD8BXP

Répondre

0
foreach($input_array as $item) { 
    $output_array[$item['city']][] = array(
      'freq' => $item['freq'], 
      'pl' => $item['pl'] 
     ); 
} 

Avec cela, $output_array finiront comme un tableau associatif dont les clés sont des villes, et dont les valeurs sont des listes de fréq + tableaux pl:

Array 
(
    ["Middletown"] => Array 
     (
      [0] => Array 
       (
        [freq] => 146.610, 
        [pl] => 77.0 
       ), 
      [1] => Array 
       (
        [freq] => 146.715, 
        [pl] => 
       ) 
      // etc... 
     ) 
    // etc... 
) 

(Et vous êtes les bienvenus - Ambre, KC9HTI)

Modifier

Une fois que vous avez exécuté le code ci-dessus, vous pouvez utiliser ce code pour obtenir le format final que vous vouliez:

foreach($output_array as $city => $freq_list) { 
    $freqs = array(); 
    foreach($freq_list as $freq) { 
     $freq_str = $freq['freq']; 
     if($freq['pl']) $freq_str .= "/" . $freq['pl']; 
     $freqs[] = $freq_str; 
    } 
    $rpt[] = $city . " " . implode(", ", $freqs); 
} 

$rpt devrait alors le tableau que vous voulez.

+0

Ambre, Merci pour la réponse rapide ... Pas tout à fait ce que je cherchais à faire, mais beaucoup plus près je devenais moi-même! Je pense que je serai capable de travailler ce mille. Merci beaucoup pour l'aide. LeRoy, KD8BXP –

+0

Hm. Laissez-moi voir si je peux ajuster cela pour mieux répondre à vos besoins. :) – Amber

+0

Voyez si le bit que j'ai ajouté en bas est utile. – Amber

2

Voici ce dont vous avez besoin:

// Here $items is your input array. 

/* First, sort input array by freq */ 

function compareByFreq($a, $b) 
{ 
    if ($a['freq'] == $b['freq']) { 
     return 0; 
    } 
    return ($a['freq'] < $b['freq']) ? -1 : 1; 
} 

uasort($items, 'compareByFreq'); 



/* Aggregate required data */ 

$result = array(); 
foreach($items as $item) 
{ 
    if (isset($result[$item['city']])) { 
     $result[$item['city']] .= ', '. $item['freq']; 
    } else { 
     $result[$item['city']] = $item['city'] . ' ' . $item['freq']; 
    } 
    if (! empty($item['pl'])) { 
     $result[$item['city']] .= '/' . $item['pl']; 
    } 
} 

$result = array_values($result); // get rid of assoc keys 
Questions connexes