【问题标题】:PHP replace Array values based on certain requirementsPHP根据某些要求替换数组值
【发布时间】:2014-09-04 21:42:36
【问题描述】:

我有一个这样的数组:

$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"]

我想以特定顺序更改每个值 IF 并且仅当数组值等于“1”时。

例如,“honda”、“toyota”、“mercedes”、“bmw”、“chevy” 值应仅在值为“1”时替换数组值,否则不要替换它,它们必须在正确的位置,例如数组中的第一个元素只能更改为 honda,而不是 toyota 或任何其他值。

我知道我必须遍历数组并提供这样的 if 语句:

foreach($array as $val) {

    if($val == 1){

    //do something

  } else {
    return null;
  }
}

请指导我正确的方向并描述如何按顺序替换值,以便丰田无法仅将第一个数组值替换为第二个位置。

【问题讨论】:

    标签: php arrays html sorting


    【解决方案1】:

    您可以这样做 - 通过引用迭代数组并在值为 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';
        })
    );
    

    【讨论】:

    • 我喜欢您的回复,如何使用 implode 函数仅在数组值不为 0 时打印数组值,并且我想是 IF 语句?
    • 你是个天才,感谢帮助,内爆工作得很好,把它变成了一个返回内爆值的函数。
    • 很好 - 你最好在 foreach 中原始 if 语句的 else 条件下 unset($array[$key),而不是在最后过滤它。
    • 好调用,unset 会去掉默认值 1 , 0,我还抛出了一个异常让函数只接受一个数组,感觉会不止一次使用这个函数加上它使用额外功能似乎是更好的 OOP 实践。
    【解决方案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;
      }
    }
    

    【讨论】:

    • 它们实际上是来自数据库的布尔值!应该已经清除了,所以它们只能是 1 或 0。
    • "0" 和布尔值 0 之间存在差异(错误) - 你应该在你的问题中澄清这一点,因为这个答案和我的答案都不适用于布尔值,因为你已经在你的问题
    • 当我执行 print_r 时,它就是这样显示我的数组的。
    【解决方案3】:

    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];
    }
    

    会产生您正在寻找的答案

    【讨论】:

      猜你喜欢
      • 2014-10-09
      • 2022-01-02
      • 2014-03-27
      • 2016-06-10
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多