【问题标题】:PHP multidimensional array value replace with another valuePHP多维数组值替换为另一个值
【发布时间】:2023-03-31 13:34:01
【问题描述】:

我有一个数组如下

Array
(
    [0] => Array
        (
            [0] => Pedigree Dry
            [1] => N/A
            [2] => N/A
            [3] => N/A
        )

    [1] => Array
        (
            [0] => Professional Range
            [1] => N/A
            [2] => N/A
            [3] => N/A
        )

    [2] => Array
        (
            [0] => Pedigree Wet
            [1] => N/A
            [2] => N/A
            [3] => N/A
        )

    [3] => Array
        (
            [0] => PMM
            [1] => N/A
            [2] => N/A
            [3] => N/A
        )

    [4] => Array
        (
            [0] => Chappi
            [1] => N/A
            [2] => N/A
            [3] => N/A
        )

    [5] => Array
        (
            [0] => Care & Treat
            [1] => N/A
            [2] => N/A
            [3] => N/A
        )

    [6] => Array
        (
            [0] => Sheba
            [1] => N/A
            [2] => N/A
            [3] => N/A
        )

    [7] => Array
        (
            [0] => Whiskas Dry
            [1] => N/A
            [2] => N/A
            [3] => N/A
        )

    [8] => Array
        (
            [0] => Whiskas Wet
            [1] => N/A
            [2] => N/A
            [3] => N/A
        )

)

上面的代码是一个多维数组。但是所有的数组元素(除了索引)都是 N/A。我想用 0 替换所有的 N/A。 如何用 0 替换所有 N/A ?

【问题讨论】:

  • 对于这样的事情,因为几乎所有的值都是N/A,我可能不会费心在数组中更改它们,而是在输出时更改它们。
  • 像echo $val == 'N/A' ? 0 : $val; 假设一个循环。
  • @Michael 我知道上面的想法。我想将上述值传递给另一个函数。那我该怎么办??
  • 如果真的需要修改,那么下面阿里的回答就不错了。
  • 我知道,不需要建议。

标签: php multidimensional-array


【解决方案1】:
$newArray = array();    
foreach($array as $inner_array) {
    $newArray[] = str_replace("N/A", 0, $inner_array);
}

这将遍历所有内部数组并将所有“N/A”替换为零并将它们添加到新的结果数组中。

工作Demo

【讨论】:

  • 如何str_replace数组中的字符串? str_replace 替换字符串中的一个字符串。基本语法。无论如何,我不反对。
  • @lolka_bolka str_replace 可以替换所有数组值,因为它会循环遍历它们。阅读文档。第三个参数是mixed,表示它可以是一个数组。我还包括了一个工作演示。
【解决方案2】:

试试这个:

function replaceNa($var) {
    if ($var == 'N/A' ) {
        return 0;
    } else {
        return $var;
    }
}

$array = array(
    array('Pedigre dry', 'N/A', 'N/A', 'N/A'),
    array('Professional Range', 'N/A', 'N/A', 'N/A'),
    array('Pedigree Wet', 'N/A', 'N/A', 'N/A'),
    array('PMM', 'N/A', 'N/A', 'N/A'),
);


foreach ($array as $key => $item) {

    $array[$key] = array_map('replaceNa', $item);
}

var_dump ($array);

【讨论】:

    【解决方案3】:

    我确信有比这更好的答案.. 但你总是可以只使用嵌套的 foreach 方法。

    //loop through each Array (first level)
    foreach ($arrays as $array) 
    {
         //create two variables for each sub array so you have access to keys and values
         foreach ($array as $key=>$value) 
         {
             if ($value = "N/A")
             {
                  $value = 0;
             }
         }
    }
    

    【讨论】:

    • 您可能希望通过引用传递$array 和$value。 foreach ($array as $key=>&$value)
    • 您需要 foreach 中的数组引用才能在迭代时实际修改循环 (near the top of foreach docs)
    • 这不会改变元素的值。 $array[$key] = 0; 或 foreach($array as &$value) 然后 $value = 0;
    猜你喜欢
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多