大家好,我有一个巨大的数组作为搜索结果返回,我想要做以下操作:
遍历数组,并为每个具有相同“spubid”的记录添加以下键/值:“sfirst,smi,slast”到父级数组成员中,在这种情况下为 $a [0]。因此,结果将保留 $a [0],但从数组中的其他成员中添加 sfirst、smi 和 slast 的值(因为它们都具有相同的“spubid”)。我认为将键值(1、2、3)添加到关联键(sfirst1 =>“J.”,smi1 =>“F.”,slast1 =>“Kennedy”)会很好。然后,我想删除该“spubid”下其余的数组成员(使用 unset())。以下是我收到的数组的简化示例,在此示例中,所有记录都具有相同的“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],但向其添加新的键=>值 (sfirst$key, smi$key, slast$key),并将具有相同 "spubid" 的所有成员的 "sfirst、smi、slast" 值附加到其中,然后取消设置 $a[1]-[3]。
只是为了澄清我的理想最终结果应该是:
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%的出版物都有多个作者,因此这个例程非常有用,可以清理结果并使解析过程更容易显示。
***更新
我认为通过简化我的示例可能会使事情不清楚。我喜欢Chacha102和zombat的回答,但我的“父数组”包含了更多的数据,那只是主键而已。我需要保留来自该记录的许多其他数据,其中小部分如下:
[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'];
}
感谢所有回复的人,非常感谢你们的帮助!