2014-10-28 2 views
-1

У меня есть массив, как показано нижеPHP значение многомерного массива заменить другим значением

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 
     ) 

) 

Приведенный выше код представляет собой многомерный array.But все элементы массива (за исключением индекса) является N/AI хотят заменить все N/A с 0. Как заменить все N/A на 0?

+3

Для чего-то вроде этого, так как почти все значения 'N/A' я бы, вероятно, не потрудились изменять их в массиве и вместо того, чтобы изменить их на выходе , –

+2

Как 'echo $ val == 'N/A'? 0: $ val; 'принимает цикл. –

+0

@ Майкл. Я знаю эту идею. Я хочу передать вышеуказанное значение другой функции. В таком случае, что я буду делать ?? – MANOJ

ответ

2
$newArray = array();  
foreach($array as $inner_array) { 
    $newArray[] = str_replace("N/A", 0, $inner_array); 
} 

Этот цикл по всем внутренним массивах и заменяет все «N/A» с нуля и добавляет их к новому результирующего массива.

Работа Demo

+1

как str_replace строка в массиве? str_replace заменяет строку в строке. базовый синтаксис. во всяком случае, я не опускаюсь вниз. – vaso123

+0

@lolka_bolka str_replace может заменить все значения массива, когда он все вокруг. Прочтите документацию. Третий параметр «mixed», что означает, что он может быть массивом. Я также включил рабочую демонстрацию. – Ali

+0

Вы правы. извините за мой комментарий. – vaso123

-1

Я уверен, что есть лучший ответ, чем этот .. но вы всегда можете просто использовать вложенный подход 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; 
     } 
    } 
} 
+0

Возможно, вы захотите передать '$ array' и' $ value' по ссылке. 'foreach ($ array as $ key => & $ value)' –

+0

Вам понадобятся ссылки на массивы в 'foreach', чтобы фактически изменить цикл во время его итерации ([около вершины' foreach' docs] (http: // php.net/manual/en/control-structures.foreach.php)) –

+0

Это не изменит значение элемента. Или '$ array [$ key] = 0;' или 'foreach ($ array as & $ value)', а затем '$ value = 0;' – Havelock

1

Попробуйте это:

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); 
+0

Привет lolka его работает отлично, Спасибо за ваш вклад. – MANOJ

Смежные вопросы