Я надеюсь, что смогу объяснить, что я пытаюсь сделать - и действительно надеяться, что кто-то сможет помочь! Вот массив, с которым я работаю
(
[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
)
)
Вывод я надеюсь получать потребности быть чем-то вроде этого:
$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"
Поля, которыми я больше всего интересуюсь, являются городом, частотой, мн - И если Вы смотрите на первый массив, я удалил конечные нули на выходном массиве. Существуют также пару раз, когда я, возможно, должен использовать поле вызова и поле примечаний, но если кто-то может указать на меня в правильном направлении, я, вероятно, смогу изобразить остальных, мне нужно - поле вызова и поле примечаний часто не использовались бы. Я попробовал несколько различных циклов foreach, но я - все еще в значительной степени новичок в PHP - и что я сделал, не работал правильно, и я в точке, были, я нуждаюсь в небольшой помощи.
Заранее спасибо за справку, LeRoy, KD8BXP
Вот что вам нужно:
// 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
foreach($input_array as $item) {
$output_array[$item['city']][] = array(
'freq' => $item['freq'],
'pl' => $item['pl']
);
}
С этим, $output_array
будет в конечном итоге как ассоциативный массив, ключи которого - города, а значения - списки массивов freq+pl:
Array
(
["Middletown"] => Array
(
[0] => Array
(
[freq] => 146.610,
[pl] => 77.0
),
[1] => Array
(
[freq] => 146.715,
[pl] =>
)
// etc...
)
// etc...
)
(И всегда пожалуйста - Amber, KC9HTI
)
После того, как вы выполнили вышеприведенный код, вы можете использовать этот код для получения окончательного формата, который вы хотели:
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
должен иметь массив, который вы хотите.