删除包含特定字符串的未设置数组

时间:2014-09-07 11:28:17

标签: php multidimensional-array

我从CSV导入了以下数组:

阵 (     [0] =>排列         (             [0] =>季度统计; 2011年第1季度; 2011年第2季度; 2011年第3季度; 2011年第4季度; 2012年第1季度; 2012年第2季度; 2012年第3季度; 2012年第4季度; 2013年第1季度; 2013年第2季度; 2013年第3季度; 2013年第4季度; Q1 / 2014         )

[1] => Array
    (
        [0] => January;7500;8800;9500;10000;10500;11000;11500;12000;12500;13000;13420;13820;14200
    )

[2] => Array
    (
        [0] => ;;17
        [1] => 30%;8%;5
        [2] => 30%;5%;4
        [3] => 80%;4
        [4] => 50%;4
        [5] => 30%;4
        [6] => 20%;4%;3
        [7] => 20%;3%;2
        [8] => 70%
    )

[3] => Array
    (
        [0] => TOTAL;7500;8500;9500;11000;12500;11400;11800;13000;12500;13000;13420;13820;14200
    )

[4] => Array
    (
        [0] => ;;17
        [1] => 30%;7
        [2] => 95%;5
        [3] => 26%;5%;4
        [4] => 76%;4
        [5] => 55%;4
        [6] => 35%;4
        [7] => 17%;4%;3
        [8] => 23%;2
        [9] => 98%;2
        [10] => 75%
    )

所以,

我想摆脱所有包含“%and TOTAL”的数组。

我想循环并取消设置匹配的案例:

$ remove =“TOTAL”; foreach($ csv as $ key => $ value){

if (in_array($remove,$value[$key])){
unset($value[$key]);

} }

这是我得到的错误: 警告:in_array()期望参数2为数组,给定

为null

我的PHP版本5.3.10

你会这样做,还是会使用array_filter?

我正在浏览2小时的论坛,但我找不到任何暗示帮助我。

干杯。

3 个答案:

答案 0 :(得分:1)

您可以preg_replace尝试删除TOTAL& %。如果您要从array中移除该元素,请使用unset&最后使用array_filter删除null元素。

$newArr = array();
foreach($arr as $key=>$value){
    foreach($value as $k=>$v){
        $newArr[$key][$k] = preg_replace('/(TOTAL)|(%)/', '', $v); //for removing TOTAL & %
        unset($arr[$key][$k]); //for unset the array elements that contains TOTAL & %
    }
}

//Output by replacement
print '<pre>';
print_r($newArr);
print '</pre>';

//output after using unset
print '<pre>';
print_r(array_filter($arr));
print '</pre>';

答案 1 :(得分:0)

在你的情况下:

foreach ($csv as $subArray)
{
    for ($i = 0, $len = count($subArray); $i < $len; $i++)
    {
        if (strpos($subArray[$i], $remove) !== false)
            unset($subArray[$i])
    }
}

评论:

  1. strpos的严格比较,如果我们使用!=,则0位置将等于false。
  2. 内循环是&#34; for-loop&#34;因为最好避免改变foreach中的数组内容。

答案 2 :(得分:0)

$arr[][] = ("QUARTERLY STATS;Q1/2011;Q2/2011;Q3/2011;Q4/2011;Q1/2012;Q2/2012;Q3/2012;Q4/2012;Q1/2013;Q2/2013;Q3/2013;Q4/2013;Q1/2014");
$arr[][] = ("January;7500;8800;9500;10000;10500;11000;11500;12000;12500;13000;13420;13820;14200");
$arr[] = array(";;17","30%;8%;5","30%;5%;4","80%;4","50%;4","30%;4","20%;4%;3","20%;3%;2","70%");
$arr[][] = ("TOTAL;7500;8500;9500;11000;12500;11400;11800;13000;12500;13000;13420;13820;14200");
$arr[] = array("30%;7","95%;5","26%;5%;4","76%;4","55%;4","35%;4","17%;4%;3","23%;2","98%;2","75%");

$newArr = array();
    foreach($arr as $key=>$value) {
        foreach($value as $k=>$v) {
        $newArr[$key][$k] = preg_replace('/(TOTAL)|(%)/', '', $v); //for removing TOTAL & %
        unset($arr[$key][$k]); //for unset the array elements that contains TOTAL & %
    }
    unset($arr[$key]); // IT does not unset ARR[2] ARR[3] and ARR[4] containing TOTAL & %
}

替换产生

print '<pre>';
print_r($newArr);
print '</pre>';

使用未设置后的输出

print '<pre>';
print_r(array_filter($arr));
print '</pre>';

我确实创建了与从CSV导入的ARRAY完全相同的ARRAY。 unset不会取消设置包含TOTAL AND%的ARRAY2,3,4。 unset不会取消设置包含TOTAL AND%的ARRAY2,3,4。