如果某个元素的键与另一个数组的键匹配,如何替换该元素?

时间:2020-05-25 18:12:10

标签: php

我有两个长度相同的txt文件(每个10行)。一个文件具有ID,另一个文件具有与每个ID相关联的“等级”(0、1、2等)。例如:

txt 1 | txt 2
123 | 1
234 | 2

我想在提供ID时替换等级。

我所做的是搜索与提供的ID关联的键,当它与评级数组中的键匹配时,我替换了评级数组中的相应值。

因此,我们的想法是在ID(键= 0)中找到“ 123”键,然后用键= 0(在这种情况下为1)将等级值替换为另一个值。

我在函数中具有以下内容:

public function updateRating($disease, $id, $rating){
    $filename = $disease.".txt";
    $filename_2 = $disease."Ratings.txt";
    $ids = file($filename);
    $ratings = file($filename_2);

    $index_ids = array_keys($ids, $id."\n");
    $index_ratings = array_keys($ratings);

    $size = count($ids);

    for($i=0; $i<$size; $i++){
        if($index_ratings[$i] == $index_ids){
            $ratings = str_replace($ratings[$i], $rating."\n", $ratings);
        }
    }

    $ratings_n = implode("", $ratings);
    file_put_contents($filename_2, $ratings_n);
    return array("debug2" => $index_ids, "debug3" => $index_ratings, "debug4" => $ratings);

已正确返回index_ids(提供的ID的键),但是返回了评级($ ratings)的数组,就好像什么都没有被替换一样。这段代码有什么问题,我该如何纠正它以完成我想要的工作?

2 个答案:

答案 0 :(得分:2)

在函数中使用array_search()获取密钥:

https://paiza.io/projects/zdg_xzGwV8KfgOqkzeCgjA

function replaceValue($value, $arr1, &$arr2){
    $key = array_search($value, $arr1);
    if($key === false){
        return false;
    }else{
        $arr2[$key] = $value;
        return true;
    }
}

if(replaceValue("baz", $arr1, $arr2)){
    print_r($arr2);
}else{
    echo "no match found";
}

Result:

Array
(
    [x] => bizz
    [y] => bazz
    [c] => baz
)

答案 1 :(得分:-1)

您可以按照以下步骤获得结果

<?php
$arr1 = [0 => '123', 1 => '234'];
$arr2 = [0 => 'a', 1 => 'b'];


for ($i=0; $i < sizeof($arr1) ; $i++) { 
    for ($i=0; $i < sizeof($arr1) ; $i++) { 
        if ($arr1[$i] == '123') {
            $arr2[$i] = 'abc';          
        }
    }
}
echo'<pre>';
print_r($arr2);
echo '<pre>';
?>

输出

Array
(
    [0] => abc
    [1] => b
)