我不确定这个标题在我的案例中是否可以理解,因为我仍被认为是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();
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 数组的集合,每个 < em> $ myObjects 数组包含 $ myObject 。
问题是,在 $ myArr 中,我不希望有任何类似的 $ myObject (假设没有多个相同的ID)。
目前, $ result 是..
您有4个待处理对象
目前在我的实际应用中, $ pids , $ myArr 包含 < em> 4个$ myObjects ,其中每个 $ myObjects 只包含 $ myObject中的1个 具有相同的 ID 。
由于他们的 ID 有相似之处,我希望 $ result
您有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++;
}
答案 0 :(得分:1)
那些 $ myObjects 具有可能相同ID的不同对象,或者可能是具有相同ID的相同对象?
如果你只是想删除重复项,你可以例如展平你的阵列(使其成为一维),然后删除重复项。
// flatten array
$flattenedArray = array_reduce($myArr, 'array_merge', array());
// remove duplicates
$myNewArr = array_unique($flattenedArray);
虽然我没有对此进行过测试,但它应该适用于所描述的情况。
答案 1 :(得分:1)
这有助于您最终获得仅填充唯一对象的数组。
<?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)";
}