如何使用 php 函数在数组中查找项目及其后的项目

Posted

技术标签:

【中文标题】如何使用 php 函数在数组中查找项目及其后的项目【英文标题】:How to find an item in an array and the one after it using php functions 【发布时间】: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 删除。 参考本题答案:***.com/questions/3059392/… @FirstOne 您可能在正确的轨道上,但我并没有尝试删除冒号,只是键“Size:”和紧随其后的值。对不起,如果我误解了什么。我是菜鸟:) @Chopin23 我删除了冒号,所以它变成了一个更通用的数组。我更喜欢稍后添加冒号。此外,以这种方式解析更容易使用,更容易查找或删除键和值。 【参考方案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]);
    

【讨论】:

以上是关于如何使用 php 函数在数组中查找项目及其后的项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中生成多个数组中的所有项目组合

php 查找数组中是否存在项目

php函数如何返回数组啊, 比如,

用 Access 中的起始部分在物料清单中查找最终项目的方法是啥?数组?递归函数?

php 使用Glob() 查找文件技巧

PHP项目开发经验整理