【问题标题】:PHP how to delete array values inside foreach loop? [duplicate]PHP如何删除foreach循环中的数组值? [复制]
【发布时间】:2015-09-21 04:00:46
【问题描述】:

我想删除包含值 2000 之外的元素(例如,Eg1、Eg2 和 Eg3),这可能会有所帮助:每个值循环可以有多个值。
删除“2000 Outside”后,仅显示最高记录数据。 Eg1 2000 星期一,Eg3 2000 星期五。 我正在寻找执行此任务的最简单函数。

Eg1
Postcode Day
2000    Monday
2000   Outside
2000   Friday
2000   Sunday
2000   wednesday

Eg2
Postcode Day
2000    Outside
2000   Monday
2000   Friday
2000   Sunday
2000   wednesday

Eg3
Postcode Day
2000    Outside
2000   Outside
2000   Friday
2000   Sunday
2000   wednesday

foreach($Items as $item)
{

echo $item->PostCode. " ".$item->Day.'<br/>'."\n";

}

【问题讨论】:

  • 删除他们的钥匙。但那是你在那里的一个对象。静止点支架。
  • 我不清楚“删除他们的关键”
  • 2000 Friday 的 example3 结果如何,就像 example2 一样,其中 2000 外部位于顶部,根据您的标准,example3 应该为空
  • @am05mhz 他只是不想在删除 2000 个外部元素后检索数组的第一个值。他的例子是正确的,不是吗?

标签: php


【解决方案1】:

我觉得你可以用这个:

foreach($Items as $key=>$item)
{
    if($item->Postcode == 2000 && $item->Day == "Outside") {
          array_splice($Items,$key,1);
    }
}

echo $Items[0]->Postcode . " " . $Items[0]->Day;

【讨论】:

  • 这个不行,都是空的
  • 奇怪,我刚刚测试了这个,它似乎工作。你确定 $Items 在传递给循环后是空的吗?
  • 如果我添加 echo $Items[0]->Postcode 。 “”。 $Items[0]->天;会出现致命错误:不能在中使用 stdClass 类型的对象作为数组
  • 您可以 print_r($Items) 并在此处打印它作为评论或您最初的问题吗?我不明白为什么 $Items 不是一个数组。
  • 只有一条记录会显示邮政编码2029只有一条数据记录。 Array ( [0] => stdClass Object ( [SubName] => ROSE BAY [PostCode] => 2029 [DeliveryDay] => 星期二 [PeriodType] => 每周 [AuState] => NSW
【解决方案2】:

对 dlegall 的回答稍作调整,因为我在本地服务器上运行时遇到了一些麻烦。我也包含了使用的数组。

$Items[] = array("Postcode" => 2000, "Day" => "Outside");
$Items[] = array("Postcode" => 2000, "Day" => "Monday");
$Items[] = array("Postcode" => 2000, "Day" => "Friday");

foreach($Items as $key => $item)
    {
        if($item["Postcode"] == 2000 && $item["Day"] == "Outside") {
              array_splice($Items,$key,1);
        }
    }

echo $Items[0]["Postcode"] . " " . $Items[0]["Day"];

【讨论】:

  • 这是我的输入和输出细节 $Items[] = array("Postcode" => 2000, "Day" => "Outside","Day" => "Monday","Day" => "星期五",,"日" => "星期一");结果应该显示 Postcode 2000 display first record Monday $Items[] = array("Postcode" => 2002, "Day" => "Outside","Day" => "Outside","Day" => "Friday", "日" => "星期一");结果应该显示 Postcode 2002 显示第二条记录 Friday
  • 你能告诉我,这个没有硬编码的第1行,我怎样才能添加动态值? array_splice($Locations,$key,1);如果您转换动态值,它将起作用。
  • 动态值是什么意思?他的代码已经足够动态了,你可以通过调用$Items[] = array('whatever value you want', 'with whatever format');$Items添加任何值
  • 我只想将 1 号转换为动态阀。 array_splice($Items,$key,1);例如 a=0; [一]
  • 因为 1 号硬编码,如果阵列在“外部”中有第二个阀门,它将仅显示“外部”。有没有办法循环数组并在显示第一个记录值日(星期一或星期五)后找到“外部”(可能是一个或多个“外部”)。因此无需显示“Outside”。
【解决方案3】:

我们不能使用下面的代码吗?

foreach($array as $element){
 if(($element->postcode == '2000') && ($element->variable == 'Outside')){
  unset($element);
 }
}

【讨论】:

  • 变量 == '2000' ?或变量 == '外部'?
  • 删除“2000 外部”后如何仅显示顶级记录数据。 Eg1 2000 星期一,Eg3 2000 星期五
  • 提醒一下,如果数组不是关联的,unset() 不会重新组织数组的索引。如果未指定,可能会导致错误。
猜你喜欢
  • 2018-08-20
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2010-12-29
相关资源
最近更新 更多