我正在尝试更新数组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循环,但是我一生都无法正常工作。
提前欢呼
答案 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));
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));
?>