2014-09-04 2 views
0

У меня есть массив, как, например:PHP заменить значение массива на основе определенных требований

$array = ["1","0","0","1","1"] 


//replace with 

$newArray = ["honda","toyota","mercedes","bmw","chevy"] 

// only if the original array had a value of "1". 
// for example this is my final desired output: 

$newArray = ["honda","0","0","bmw","chevy"] 

Я хочу изменить каждое значение в определенном порядке, если и только если значение массива равно «1».

Например, значения «honda», «toyota», «mercedes», «bmw», «chevy» должны заменять только значения массива, если значение «1» в противном случае не заменяет его, и они должны быть в правой позиции, например, первый элемент в массиве должен быть заменен только на honda, а не на toyota или на любые другие значения.

Я знаю, что я должен перебирать массив и обеспечить, если заявление, как например:

foreach($array as $val) { 

    if($val == 1){ 

    //do something 

    } else { 
    return null; 
    } 
} 

Пожалуйста направьте меня в правильном направлении, и описать, как заменить значения в порядке, так что Тойота не может заменить первое значение массива - только вторая позиция.

ответ

4

Вы можете так что-то вроде этого - итерация массива по ссылке, и в замене, когда значение 1 (строка) и значение в замене массива существует:

foreach($array as $key => &$current) { 
    if($current === '1' && isset($replace[$key])) 
     $current = $replace[$key]; 
} 

Output:

Array 
(
    [0] => honda 
    [1] => 0 
    [2] => 0 
    [3] => bmw 
    [4] => chevy 
) 

Согласно вашему комментарию, для вывода взорванного списка автомобилей, которые имеют значения, вы можете сделать что-то вроде этого - отфильтровывать все нулевые значения и запятые взрывается:

echo implode(
    // delimiter 
    ', ', 
    // callback - filter out anything that is "0" 
    array_filter($array, function($a) { 
     return $a != '0'; 
    }) 
); 
+0

мне нравится ваш ответ, как распечатать массив значений только если они не 0, используя функцию implode, и я полагаю, что оператор IF? – AntonB

+1

Вы гений, цените помощь, the implode работал GREAT, превратил это в функцию, которая вернет вложенные значения. – AntonB

+1

Ницца - вам лучше «отменить» ($ array [$ key) »в другом состоянии вашего оригинального оператора if в foreach, вместо того, чтобы его фильтровать в конце. –

2

В настоящее время наша if спрашивает, если $val является true (или, если он существует) в то время как значения вашего числового массива являются строками.

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

$array = ["1","0","0","1","1"] 
$newArray = ["honda","toyota","mercedes","bmw","chevy"] 

foreach($array as $key => $val) { 
    if($val === '1'){ // if you only want honda 
    $array[$key] = $newArray[$key]; 
    } else { 
    return null; 
    } 
} 
+0

они фактически являются булевыми значениями, поступающими из базы данных! должен был очистить это так, чтобы они могли быть только 1 или 0. – AntonB

+0

Существует разница между '" 0 "и логическим' 0' (false) - вы должны прояснить это в своем вопросе, поскольку ни этот ответ, ни мой не будут работать для булевых , так как вы указали строки в своем вопросе –

+0

Когда я сделал print_r, то, как он отобразил мой массив. – AntonB

0

PHP код

$array = array("1","0","0","1","1"); 
$newArray = array("honda","toyota","mercedes","bmw","chevy"); 

foreach($array as $key => $val) { 
    if($val === '1') 
     $array[$key] = $newArray[$key]; 
} 

бы произвести ответ, который вы ищете

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