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

如何使用php函数查找数组中的项及其后的项,php,arrays,foreach,Php,Arrays,Foreach,我使用foreach循环遍历我的数组。我正在对特定值进行更改,但不考虑其他值。(在本例中,我在每一项前都用冒号做了一个休息,除非它是第一项) 如果当前值包含一个特定的字符串,我想在数组中删除该值和紧跟其后的值,然后在foreach循环中继续 例如: $items = array( 'Color:', 'blue', 'Size:', '12" x 12"', 'Weight:', '5 lbs' ); $first = true; foreach ($items as $item) {

我使用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', 'Size:' => '12 x 12',  'Weight:' => '5 lbs' );

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

由于不同的项目有不同的值,不一定每次都按相同的顺序排列,因此我无法通过
项目[2]
项目[3]
等进行选择。

您可以执行以下操作

foreach($items作为$key=>$item){
if(strpos($item,'Size:')!==false){
未设置($items[$key]);
未设置($items[$key+1]);
}
}

据我所知,您希望去掉字符串数组“Size”。如果是这样,那么可以用两种方法解决这个问题。在第一个例子中(在你的例子中),我建议在循环中使用unset函数,就像同事卢卡斯·维埃拉的例子一样。在第二种情况下,我建议使用函数而不是for循环,如下例所示:

if(array_key_exists('Size:',  $items))
    unset($items['Size:']);
顺便说一句,你有一个奇怪的数组结构,它内置在一个关联数组中,因此更容易在其中导航。例如:

$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', 'Size:' => '12 x 12',  'Weight:' => '5 lbs' );

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

如果解析该数组,则可以更好地处理它(例如使用下面的代码删除项)

要做到这一点,请按如下方式进行分析:

$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
)
看一看



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

利用数据。难道你就不能解析数组吗?像这样:。然后,用
unset
删除。请参考此问题以获得答案:@FirstOne您可能走对了,但我不是要删除冒号,只是删除键“Size:”和它后面的值。对不起,如果我误解了什么。我是noob:)@Chopin23我去掉了冒号,所以它变成了一个更通用的瞳孔阵列。我更喜欢稍后添加冒号。此外,通过这种方式,您可以更轻松地使用和查找或删除键和值。如果我的回答有助于解决问题,请偿还积分