匹配数组并更新数组一中的值

时间:2018-10-06 15:10:43

标签: php arrays

我正在尝试更新数组1的值(如果它在数组2中找到),例如:

$all_pets = ['Cat' => 0, 'Dog' => 0, 'Bird' => 0, 'Rabbit' => 0, 'Fish' => 0];
$user_has = ['Cat', 'Fish']; 

我需要以以下方式获取数据:

$has_pets = ['Cat' => 1, 'Dog' => 0, 'Bird' => 0, 'Rabbit' => 0, 'Fish' => 1];

我尝试过使用array_intersect()函数和foreach循环,但是我一生都无法正常工作。

提前欢呼

4 个答案:

答案 0 :(得分:3)

您可以使用foreach遍历数组$user_has。使用isset()检查密钥是否存在于$all_pets中。如果是这样,请更改该值。

$all_pets = ['Cat' => 0, 'Dog' => 0, 'Bird' => 0, 'Rabbit' => 0, 'Fish' => 0];
$user_has = ['Cat', 'Fish']; 

foreach( $user_has as $value ) {
    if ( isset( $all_pets[ $value ] ) ) $all_pets[ $value ]++;
}

这将导致:

Array
(
    [Cat] => 1
    [Dog] => 0
    [Bird] => 0
    [Rabbit] => 0
    [Fish] => 1
)

答案 1 :(得分:3)

您可以使用array_merge()array_count_values()

array_merge($all_pets, array_count_values($user_has));

Here's a demo

array_count_values()对数组中每个值的出现进行计数,并返回具有value => count对的数组。

array_merge()合并数组,如果它们具有相同的字符串键,则该键的后一个值将覆盖前一个。

答案 2 :(得分:0)

使用foreach和in_array()

$all_pets = ['Cat' => 0, 'Dog' => 0, 'Bird' => 0, 'Rabbit' => 0, 'Fish' => 0];
$user_has = ['Cat', 'Fish']; 
foreach($all_pets as $key=>$value){
    if(in_array($key,$user_has){
        $indexes = array_keys($user_has,$key); 
        $all_pets[$key]= count($indexes);
    }
}

答案 3 :(得分:0)

<?php 

$all_pets = ['Cat' => 0, 'Dog' => 0, 'Bird' => 0, 'Rabbit' => 0, 'Fish' => 0];
$user_has = ['Cat', 'Fish']; 


$has_pets = array();

foreach ($user_has as $key => $pet) {
    $has_pets[$pet]++;
}

print_r(array_merge($all_pets, $has_pets));
?>