Php 如何在现有数组中查找对象
我不确定这个标题是否可以理解,因为我仍然被认为是PHP中的noob 这是我的密码Php 如何在现有数组中查找对象,php,arrays,Php,Arrays,我不确定这个标题是否可以理解,因为我仍然被认为是PHP中的noob 这是我的密码 // An object has property e.g. (ID, Name, Status) // This function returns an array of object. function getObjects ($pid) { //return objects } $pids = { 2, 23, 41, 45, 56, 91, 105, 107, 210 }; $myArr = array
// An object has property e.g. (ID, Name, Status)
// This function returns an array of object.
function getObjects ($pid) { //return objects }
$pids = { 2, 23, 41, 45, 56, 91, 105, 107, 210 };
$myArr = array();
foreach ($pids as $pid)
{
$myObjects = getObjects($pid);
if (count($myObjects) > 0)
{
array_push($myArr, $myObjects);
}
}
if ( count($myArr) > 0 )
{
$result = "You have " . count($myArr) . " pending object";
}
因此,在$myArr中有$myObjects数组的集合,每个$myObjects数组包含$myObject
问题是,在$myArr中,我不希望有任何类似的$myObject(假设没有多个相同的ID)
目前,$result为
您有4个挂起的对象
目前在我的实际应用程序中,对于那些$pids,$myArr包含4个$myObjects,并且每个$myObjects只包含具有相同ID的$myObject中的一个
由于它们的ID有相似之处,我希望我的$结果是正确的
您有1个挂起的对象
我很抱歉解释得不好,我希望到目前为止我已经说得很清楚了
编辑
$arrDraftLoadplans = array();
$arrDraftPickslips = array();
$arrDraftReplenishments = array();
$arrUncompletedWriteoffs = array();
$arrUncompletedASNs = array();
$arrDraftReplenishment = array();
$totalError = 0;
$resultFormat = "</br><a href='%s'>%d %s</a>";
$draftTRNs = PutawayPeer::getPutawaysByProductIdAndStatus(null, Putaway::STATUS_DRAFT);
if ( count ($draftTRNs) > 0 )
{
$result .= sprintf ($resultFormat, "../warehouseReturns/putawayList?principal_id=-1&refresh=Refresh", count ($draftTRNs), "Unconfirmed Putaway(s)");
$totalError++;
}
foreach ($productIds as $pid)
{
$draftLoadplans = LoadPlanPeer::getLoadplansByProductIdAndStatus($pid);
if (count($draftLoadplans) > 0)
{
array_push($arrDraftLoadplans, $draftLoadplans);
}
$draftPickslips = PickSlipPeer::getPickslipsByProductIdAndPicklistStatus($pid);
if (count($draftPickslips) > 0)
{
array_push($arrDraftPickslips, $draftPickslips);
}
$draftReplenishments = ReplenishmentPeer::getReplenishmentsByProductIdAndStatus($pid);
if (count($draftReplenishments) > 0)
{
array_push($arrDraftReplenishments, $draftReplenishments);
}
$uncompletedWriteoffs = WriteOffPickslipPeer::getUnconfirmedWriteOffPickslipsByProductId($pid);
if (count($uncompletedWriteoffs) > 0)
{
array_push($arrUncompletedWriteoffs, $uncompletedWriteoffs);
}
$uncompletedASNs = AdvanceShippingNoticePeer::getAdvanceShippingNoticesByProductIdAndBetweenStatus($pid);
if (count($uncompletedASNs) > 0)
{
array_push($arrUncompletedASNs, $uncompletedASNs);
}
}
if (count($arrDraftLoadplans) > 0)
{
$result .= sprintf ($resultFormat, "../warehouseOutbound/outPickrelease", count ($arrDraftLoadplans), "Pending Loadplan(s)");
$totalError++;
}
if (count($arrDraftPickslips) > 0)
{
$result .= sprintf ($resultFormat, "../warehouseOutbound/outPicking", count ($arrDraftPickslips), "Pending Pickslip(s)");
$totalError++;
}
if (count($arrDraftReplenishment) > 0)
{
$result .= sprintf ($resultFormat, "../inventoryStockReplenishment/replenishmentList", count ($arrDraftReplenishment), "Pending Replenishment(s)");
$totalError++;
}
if (count($arrUncompletedWriteoffs) > 0)
{
$result .= sprintf ($resultFormat, "../warehouseReturns/writeOffPickslipList", count ($arrUncompletedWriteoffs), "Pending Write-Off(s)");
$totalError++;
}
if (count($arrUncompletedASNs) > 0)
{
$result .= sprintf ($resultFormat, "#", count ($arrUncompletedASNs), "Pending ASN(s)");
$totalError++;
}
$arrDraftLoadplans=array();
$arrdraftpickships=array();
$arrdraftrequirements=array();
$arrUncompletedWriteoffs=array();
$arrUncompletedASNs=array();
$arrdraftrequinction=array();
$totalError=0;
$resultFormat=“”;
$draftTRNs=putawayper::getputawaysbyProductId和STATUS(null,Putaway::STATUS\u DRAFT);
如果(计数($draftTRNs)>0)
{
$result.=sprintf($resultFormat,“../warehouseReturns/putawayList?principal_id=-1&refresh=refresh”,count($draftTRNs),“未确认的存放”;
$totalError++;
}
foreach($productId为$pid)
{
$draftLoadplans=LoadPlanPeer::getLoadplansByProductIdAndStatus($pid);
如果(计数($draftLoadplans)>0)
{
阵列推送($arrDraftLoadplans,$draftLoadplans);
}
$draftPickslips=PickSlipeer::GetPickSlipsByProductId和PickListStatus($pid);
如果(计数($draftPickslips)>0)
{
阵列推送($arrDraftPickslips,$draftPickslips);
}
$DraftRequirements=RequirementPeer::GetRequirementsByProductIDAndStatus($pid);
如果(计数($DraftRequirements)>0)
{
阵列推送($ArrDraftRequirements,$DraftRequirements);
}
$uncompletedWriteoffs=WriteOffPickSlipBeer::getUnconfirmedWriteOffPickslipsByProductId($pid);
如果(计数($uncompletedWriteoffs)>0)
{
数组推送($arrUncompletedWriteoffs,$uncompletedWriteoffs);
}
$uncompletedASNs=AdvanceShippingNoticePeer::GetAdvanceShippingNoticesByProductId和Between状态($pid);
如果(计数($uncompletedASNs)>0)
{
数组推送($arrUncompletedASNs,$uncompletedASNs);
}
}
如果(计数($arrDraftLoadplans)>0)
{
$result.=sprintf($resultFormat,“../warehouseOutbound/outPickrelease”,count($arrDraftLoadplans),“待定的Loadplan)”;
$totalError++;
}
如果(计数($arrDraftPickslips)>0)
{
$result.=sprintf($resultFormat,“../warehouseOutbound/outPicking”,count($arrdraftPickSlip),“待定Pickslip”);
$totalError++;
}
如果(计数($ArrDraftRequirement)>0)
{
$result.=sprintf($resultFormat,“../inventoryStockRequirements/RequirementList”,count($arrdraftRequirements),“待定补货”);
$totalError++;
}
如果(计数($arrUncompletedWriteoffs)>0)
{
$result.=sprintf($resultFormat,“../warehouseReturns/writeOffPickslipList”,count($arrUncompletedWriteoffs),“待定核销”);
$totalError++;
}
如果(计数($arrUncompletedASNs)>0)
{
$result.=sprintf($resultFormat,“#”,count($arrUncompletedASNs),“待定ASN”);
$totalError++;
}
那么,这些$myObjects是可能具有相同ID的不同对象,还是可能具有相同ID的相同对象
例如,如果您只想删除重复项,可以将阵列展平(使其为一维),然后删除重复项
// flatten array
$flattenedArray = array_reduce($myArr, 'array_merge', array());
// remove duplicates
$myNewArr = array_unique($flattenedArray);
虽然我还没有测试过,但它应该在所描述的情况下工作。这有助于您得到一个只填充唯一对象的数组
<?php
// An object has property e.g. (ID, Name, Status)
// This function returns an array of object.
function getObjects($pid) {
//return objects
}
$pids = array(2, 23, 41, 45, 56, 91, 105, 107, 210);
$myArr = array();
$usedIds = array();
foreach ($pids as $pid) {
$myObjects = getObjects($pid);
if (count($myObjects) > 0) {
foreach($myObjects as $myObj){
if(!in_array($myObj->ID, $usedIds)){
$usedIds = $myObj->ID;
$myArr[] = $myObj;
}
}
}
}
if (count($myArr) > 0) {
$result = "You have " . count($myArr) . " pending object(s)";
}
Post original array或用更好的示例改进您的问题,这些示例与您当前的代码有一定的相关性啊,你能编辑//return objects}
部分:)它注释掉了最后一个}
,所以在我看来,好像有一个名为getObjects
的函数,它被无休止地调用,并且会以太多的迭代结束。。。想想看你的代码时,大多数试图帮助你的人都会明白这一点:D@Uchiha我添加了原始代码。@HansWassink至少有5个或更多的函数,为了使它更简单,我这样说。。我非常清楚,这可以通过嵌套的foreach和if条件来实现,但我希望采用不同的方法。哦,您的意思是将$myArr美元用于存储$myObject而不是$myObjects?这应该是一个选项,但我必须声明更多的新变量,我担心这种代码很难与其他开发人员一起维护。。但是谢谢,我会试试这个,很快让你知道。谢谢汉斯,我找不到比嵌套foreach更好的方法了。没问题,祝你好运!它们是同一个物体。是的,我想删除数组中重复的值。我也要试试这个。感谢您的回答,在MyObjor类中,您可以实现返回ID的y-ytoStrink()方法,即上述代码是有效的,并且AARAY-IOLL将在相同ID的情况下考虑2个对象是相同的(尽管有更清洁的方法来实现)。把这个放在这里是为了将来:)哇,实际上array_unique($myArr)就是这么做的。实际上,这是一个非常简单和神奇的方法。它只返回1