Привет всем, у меня есть огромный массив, возвращающийся в качестве результатов поиска, и я хочу сделать следующее:
Пройдите по массиву и для каждой записи с одинаковым «spubid» добавьте следующие ключи / значения: «sfirst, smi, slast» в родительский элемент массива в этом случае, $ a [0]. Таким образом, результатом будет оставить $ a [0] в такте, но добавить к нему значения из sfirst, smi и slast от других элементов в массиве (так как все они имеют одинаковый «spubid»). Я думаю, что добавление значения ключа (1, 2, 3) к ассоциированному ключу (sfirst1 => "J.", smi1 => "F.", Slast1 => "Kennedy") было бы хорошо. Затем я хотел бы DROP (unset ()) остальных членов в массиве с этим "spubid". Вот упрощенный пример массива, который я получаю, и в этом примере все записи имеют одинаковый «spubid»:
Array (
[0] =>
Array (
[spubid] => A00502
[sfirst] => J.
[smi] => A.
[slast] => Doe
[1] =>
Array (
[spubid] => A00502
[sfirst] => J.
[smi] => F.
[slast] => Kennedy
[2] =>
Array (
[spubid] => A00502
[sfirst] => B.
[smi] => F.
[slast] => James
[3] =>
Array (
[spubid] => A00502
[sfirst] => S.
[smi] => M.
[slast] => Williamson
)
)
Так что по сути я хочу сохранить $ a [0], но добавить к нему новые значения keys => (sfirst $ key, smi $ key, slast $ key) и добавить значения из «sfirst, smi, slast» из ВСЕ члены с таким же "spubid" затем сбрасывают $ a [1] - [3].
Просто чтобы уточнить мой конечный результат IDEAL будет:
Array (
[0] =>
Array (
[spubid] => A00502
[sfirst] => J.
[smi] => A.
[slast] => Doe
[sfirst1] => J.
[smi1] => F.
[slast1] => Kennedy
[sfirst2] => B.
[smi2] => F.
[slast2] => James
[sfirst3] => S.
[smi3] => M.
[slast3] => Williamson
)
)
В большинстве случаев у меня будет гораздо больший массив для начала, включающий множество "spubid", но в 99% публикаций есть более одного автора, поэтому эта процедура будет очень полезна для очистки результатов и создания процесс разбора для отображения гораздо проще.
*** UPDATE
Я думаю, из-за упрощения моего примера, я, возможно, сделал вещи неясными. Мне нравятся ответы как Chacha102, так и zombat, но мой «родительский массив» содержит МНОГО больше, чем просто pubid, который просто является первичным ключом. Мне нужно сохранить много других данных из этой записи, небольшая часть которых выглядит следующим образом:
[spubid] => A00680
[bactive] => t
[bbatch_import] => t
[bincomplete] => t
[scitation_vis] => I,X
[dentered] => 2009-08-03 12:34:14.82103
[sentered_by] => pubs_batchadd.php
[drev] => 2009-08-03 12:34:14.82103
[srev_by] => pubs_batchadd.php
[bpeer_reviewed] => t
[sarticle] => A case study of bora-driven flow and density changes on the Adriatic shelf (January 1987)
.
.
.
.
.
Примерно 40 столбцов возвращаются с каждым поисковым запросом. Вместо того, чтобы жестко кодировать их, как это делают примеры с pubid, как я могу включить их, все еще делая изменения, как вы оба предложили. Создание многомерного массива (как вы оба предложили) с участием авторов, являющихся частью многомерности, прекрасно, спасибо вам обоим за предложение.
**** ОБНОВЛЕНИЕ:
Вот то, на чем я остановился, очень простое решение, которое отлично справляется со своей работой. Я заканчиваю тем, что создаю многомерный массив, поэтому авторы разбиты.
Упрощенное решение:
$apubs_final = array();
$spubid = NULL;
$ipub = 0;
foreach($apubs as $arec)
{
if($spubid != $arec['spubid'])
{
$ipub++;
$apubs_final[$ipub] = $arec;
// insert UNSET statements here for author data
$iauthor = 0;
$spubid = $arec['spubid'];
}
$iauthor++;
$apubs_final[$ipub]['authors'][$iauthor]['sauthor_first'] = $arec['sfirst'];
}
Спасибо всем, кто откликнулся, ваша помощь очень ценится!