php - 替换数组值

时间:2011-03-03 10:39:54

标签: php

想要将数组值替换为0,排除work和home

array(work,home,sky,door);

我想用php替换这个数组值,

我尝试使用此函数替换此数组

$asting = array(work,home,sky,door);
$a = str_replace("work","0",$asting);

我的数组如何从提交的表单中添加无穷大,但我想将值替换为0以排除工作&只有家吗?

9 个答案:

答案 0 :(得分:10)

循环将多次执行一系列操作。因此,对于数组中的每个元素,您将检查它是否等于您要更改的元素,如果是,则更改它。还要确保在字符串周围加上引号

//Setup the array of string
$asting = array('work','home','sky','door')

/**
Loop over the array of strings with a counter $i,
Continue doing this until it hits the last element in the array
which will be at count($asting)
*/
for($i = 0; $i < count($asting);$i++){
   //Check if the value at the 'ith' element in the array is the one you want to change
  //if it is, set the ith element to 0
    if ($asting[$i] == 'work' || $asting[$i] == 'home')
       $asting[$i] = 0;
}

以下是一些建议阅读:

http://www.php.net/manual/en/language.types.array.php

http://www.php.net/manual/en/language.control-structures.php

但是如果你正在努力解决诸如循环之类的问题,你可能需要阅读一些介绍性的编程材料。哪个应该可以帮助你真正了解正在发生的事情。

答案 1 :(得分:9)

更优雅,更短的解决方案。

$aArray = array('work','home','sky','door');   

foreach($aArray as &$sValue)
{
     if ( $sValue!='work' && $sValue!='home' ) $sValue=0;
}

&amp; operator是指向数组中特定原始字符串的指针。 (而不是该字符串的副本) 您可以通过这种方式为数组中的字符串分配新值。您可能不会做的唯一事情是可能会扰乱数组中的顺序,例如unset()或键操作。

上面示例的结果数组将是

$aArray = array('work','home', 0, 0)

答案 2 :(得分:2)

有点其他更快的方法,但是确实需要一个循环:

//Setup the array of string
    $asting = array('bar', 'market', 'work', 'home', 'sky', 'door');

//Setup the array of replacings
    $replace = array('home', 'work');

//Loop them through str_replace() replacing with 0 or any other value...
    foreach ($replace as $val) $asting = str_replace($val, 0, $asting);

//See what results brings:    
    print_r ($asting);

将输出:

Array
(
    [0] => bar
    [1] => market
    [2] => 0
    [3] => 0
    [4] => sky
    [5] => door
)

答案 3 :(得分:1)

您还可以在str_replace ...

上将数组作为参数1和2

答案 4 :(得分:1)

for循环只是一小部分。很多人都没有意识到第二次比较任务是在每次新的迭代中完成的。因此,如果是大数组或计算的情况,您可以通过执行以下操作来优化循环:

for ($i = 0, $c = count($asting); $i < $c; $i++) {...}

您可能还希望http://php.net/manual/en/function.array-replace.php查看原始问题,除非代码确实是最终的:)

答案 5 :(得分:1)

使用array_map的替代方法:

$original = array('work','home','sky','door');

$mapped = array_map(function($i){
    $exclude = array('work','home');
    return in_array($i, $exclude) ? 0 : $i; 
}, $original);

答案 6 :(得分:1)

您可以尝试使用array_walk函数:

function zeros(&$value) 
{ 
    if ($value != 'home' && $value != 'work'){$value = 0;}      
}   

 $asting = array('work','home','sky','door','march');   

 array_walk($asting, 'zeros');
 print_r($asting);

答案 7 :(得分:0)

  
    

尝试一下

  
$your_array = array('work','home','sky','door');
$rep = array('home', 'work');
foreach($rep as $key=>$val){
     $key = array_search($val, $your_array);
     $your_array[$key] = 0;
}
print_r($your_array);

答案 8 :(得分:-1)

这是我的最终代码

//Setup the array of string
$asting = array('work','home','sky','door','march');

/**
Loop over the array of strings with a counter $i,
Continue doing this until it hits the last element in the array
which will be at count($asting)
*/
for($i = 0; $i < count($asting); $i++) {
//Check if the value at the 'ith' element in the array is the one you want to change
//if it is, set the ith element to 0
if ($asting[$i] == 'work') {
   $asting[$i] = 20;
} elseif($asting[$i] == 'home'){
    $asting[$i] = 30;

}else{
    $asting[$i] = 0;
}

echo $asting[$i]."<br><br>";

$total += $asting[$i];
}

echo $total;