【问题标题】:PHP Compare keys and change certain values from a multidimensional array with corresponding keys' values from a simple arrayPHP 比较键并将多维数组中的某些值与简单数组中对应键的值进行比较
【发布时间】:2016-07-09 15:16:12
【问题描述】:

我有两个数组(一个简单数组和一个多维数组),我想验证多维数组中的某些键是否有空值,并将它们替换为简单数组中的对应值。

简单数组和/或二维数组的解决方案在这里:

PHP Compare and change certain elements in multidimensional arrays

但是在上述情况下,解决方案是什么?

简单数组示例:

$superheroes_complete = array(
    1 => 'one',
    'two' => 'two',
    3 => 'three',
    'email' => 'peterparker@mail.com',
    5 => 'cinco',
    6 => 'six',
    'name' => 'Clark Kent',
    8 => 'eight'
);

多维数组示例:

$superheroes_empty = array(
    "spiderman" => array(
        "name" => "Peter Parker",
        "email" => "",
    ),
    "superman" => array(
        "name" => "",
        "email" => "clarkkent@mail.com",
    ),
    "ironman" => array(
    "name" => "Harry Potter",
    "email" => "harrypotter@mail.com",
    )
);

期望:

$superheroes_empty = array(
    "spiderman" => array(
        "name" => "Peter Parker",
        "email" => "peterparker@mail.com",
    ),
    "superman" => array(
        "name" => "Clark Kent",
        "email" => "clarkkent@mail.com",
    ),
    "ironman" => array(
        "name" => "Harry Potter",
        "email" => "harrypotter@mail.com",
    )
);

提前谢谢你。

【问题讨论】:

  • 那么您的简单数组应该如何与多维数组关联,以知道要更改哪些值?看不出两者有什么关系,也看不出任何解释
  • 应该根据它们的键名建立关系。将比较多维数组中哪些键为空,并将其值替换为简单数组中键的对应值。在上面的例子中应该替换“name”和“email”键的值。

标签: php arrays multidimensional-array


【解决方案1】:

这是使用array_walk_recursive 的一种方法:

array_walk_recursive($superheroes_empty, function(&$v, $k) use ($superheroes_complete) {
    if ($v === '' && isset($superheroes_complete[$k])) {
        $v = $superheroes_complete[$k];
    }
});

如果在$superheroes_complete 中找到相应的键,这将填充任何空值。由于这会通过引用进行替换,因此会直接更改$superheroes_empty 数组,因此如果您仍然需要空值的数组,请在使用前复制。

【讨论】:

  • 没关系,我不需要它的数据。这只是一个例子。但重要的是$superheroes_empty 在替换完成后保持在初始结构中。这可能吗?
  • 这不会改变结构;它只会填充空值。
【解决方案2】:

你也可以用这个

foreach($superheroes_empty as $key =>$array){
    foreach($array as $key1=>$data){        
        if(empty($data)){           
            $superheroes_empty[$key][$key1] = $superheroes_complete[$key1];         
            }
        }   
    }
    echo "<pre>";print_r($superheroes_empty);

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    相关资源
    最近更新 更多