【发布时间】:2009-08-03 22:23:16
【问题描述】:
大家好,我有一个庞大的数组作为搜索结果返回,我想要执行以下操作:
遍历数组并为每个具有相同“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)并附加来自“sfirst,smi,slast”的值所有具有相同“spubid”的成员然后取消设置 $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 的响应,但我的“父数组”包含的不仅仅是一个 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'];
}
感谢所有回复的人,非常感谢您的帮助!
【问题讨论】:
-
获得一组作者数组是否更容易,每个数组都包含 sfirst、smi 和 slast?
-
那里,我在回答中为你做了两种方式,以防你愿意切换到不同的格式。
-
那里,已经进行了更改。
-
你如何处理你最终得到的数组?为什么它需要采用这种格式?
-
匈牙利符号让我眼睛流血。