我使用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[2]
和item[3]
等进行选择。< / p>
答案 0 :(得分:0)
据我所知,你想摆脱字符串数组&#34;尺寸&#34;。如果是这样,那么你可以通过两种方式解决这个问题。在第一个(在你的情况下)我建议在循环中使用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]);
答案 1 :(得分:0)
如果解析该数组,则可以更好地处理它(例如使用下面的代码删除项目)
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 :(得分:-1)
您可以执行以下操作
foreach ($items as $key => $item) {
if (strpos($item, 'Size:') !== false) {
unset($items[$key]);
unset($items[$key + 1]);
}
}