Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在现有数组中查找对象_Php_Arrays - Fatal编程技术网

Php 如何在现有数组中查找对象

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

我不确定这个标题是否可以理解,因为我仍然被认为是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数组的集合,每个$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