【问题标题】:How to find an item in an array and the one after it using php functions如何使用 php 函数在数组中查找项目及其后的项目
【发布时间】:2018-04-06 21:30:58
【问题描述】:

我正在使用 foreach 循环来遍历我的数组。我正在对特定值进行更改,但其余部分不予考虑。 (在这种情况下,我会在每个带有冒号的项目之前进行休息,除非它是第一个)

如果当前值包含特定字符串,我想删除该值和数组中紧随其后的值,并在 foreach 循环中从那里继续。

例如:

$items = array( 'Color:', 'blue', 'Size:', '12" x 12"', 'Weight:', '5 lbs' );
$first = true;

foreach ($items as $item) {

  if ((strpos($item, ':')) && $first) {
    $item = '<b>' . $item . '</b>';
    $first = false;
  } elseif (strpos($item, ':')) {
    $item = '<br>' . '<b>' . $item . '</b>';
  }

  if (strpos($item, 'Size:')) {
    // Remove this item (Size) and the one directly after it (12" x 12")
  }
}

这是我想要返回的:

$items = array( 'Color:', 'blue', 'Weight:', '5 lbs' );

由于不同的item有多种取值,不一定每次都是同一个顺序,所以我无法通过item[2]item[3]等选择。

【问题讨论】:

  • 利用in_array()
  • 你不能只解析数组吗?像这样:https://eval.in/886921。然后,使用unset 删除。
  • @FirstOne 您可能在正确的轨道上,但我并没有尝试删除冒号,只是键“Size:”和紧随其后的值。对不起,如果我误解了什么。我是菜鸟:)
  • @Chopin23 我删除了冒号,所以它变成了一个更通用的数组。我更喜欢稍后添加冒号。此外,以这种方式解析更容易使用,更容易查找或删除键和值。

标签: php arrays foreach


【解决方案1】:

如果你解析那个数组,你可以更好地处理它(例如使用下面的代码来删除一个项目)

unset($arr['Size']);

为了能够做到这一点,请像这样解析它:

$items = array( 'Color:', 'blue', 'Size:', '12" x 12"', 'Weight:', '5 lbs' );
$key = null;
$arr = array();
foreach($items as $i){
  if(empty($key)){
    $key = $i;
  }else{
    $arr[rtrim($key, ':')] = $i;
    $key = null;
  }
}

现在$arr 看起来像这样:

Array
(
    [Color] => blue
    [Size] => 12" x 12"
    [Weight] => 5 lbs
)

查看example


您可能注意到我从项目中删除了冒号。我更喜欢按原样处理数据,并在需要时进行连接,就像连接 html 标记一样。

【讨论】:

    【解决方案2】:

    据我了解,您希望摆脱字符串数组“Size”。如果是这样,那么您可以通过两种方式解决此问题。在第一个(在你的情况下)我建议在循环中使用 unset 函数,就像同事 Lucas Vieira 的例子一样。在第二种情况下,我建议使用函数而不是 for 循环,如下例所示:

    if(array_key_exists('Size:',  $items))
        unset($items['Size:']);
    

    顺便说一句。你有一个奇怪的数组结构,它内置在一个关联数组中,因此更容易浏览它。例如:

    $items = array('Color:' => 'blue', 'Size:' => '12 x 12',  'Weight:' => '5 lbs' );
    
    foreach ($items as $key => $item)
       if (strpos($key, 'Size:') !== false)
          unset($items[$key]);
    

    【讨论】:

    • 如果我的回答帮助解决了问题,请加分
    【解决方案3】:

    您可以执行以下操作

    foreach ($items as $key => $item) {
        if (strpos($item, 'Size:') !== false) {
            unset($items[$key]);
            unset($items[$key + 1]);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2020-09-03
      • 2013-03-07
      • 2019-01-03
      • 1970-01-01
      相关资源
      最近更新 更多