更新数组中键的值

时间:2017-09-30 20:06:11

标签: php arrays

我想将所有' imdb'的值乘以键10,并更新值。在下面的代码中,当我print_r $ horrorMovies时,它只显示我创建了一个具有所需数量的新数组。它几乎就在那里,如果我做

 $horrorMovies[0]['imdb'] = $imdbPercent;

但是这些值只是写入第一个嵌套数组。

如果有可能的话,我不确定如何使用foreach工作。

function imdbMultiply($n) {
    return($n['imdb'] * 10);
}

$horrorMovies = array(
    array(
    "title" => "The babadook",
    "imdb"  => 6.8,
    "rotten" => 98
    ),
    array(
    "title" => "The shining",
    "imdb" => 8.4,
    "rotten" => 87
)

);



$imdbPercent = array_map("imdbMultiply", $horrorMovies);

$horrorMovies['imdb'] = $imdbPercent;

5 个答案:

答案 0 :(得分:0)

您的代码存在一些问题:

  1. 您的imdbMultiply函数需要返回$n数组,但需要修改,以便将imdb键乘以10。
  2. array_map返回新数组,因此您应将$horrorMovies设置为array_map
  3. 的结果

    最后,您的代码应如下所示:

    function imdbMultiply ($n) {
        $n['imdb'] *= 10;
        return $n;
    }
    
    $horrorMovies = array_map('imdbMultiply', $horrorMovies);
    

答案 1 :(得分:0)

//original data
$horrorMovies = array(
    array(
    "title" => "The babadook",
    "imdb"  => 6.8,
    "rotten" => 98
    ),
    array(
    "title" => "The shining",
    "imdb" => 8.4,
    "rotten" => 87
)
);

//define "transformation" function, note that the argument is passed via reference
function imdbMultiply(&$n) {
    $n['imdb'] *= 10;
}

//one option is to use foreach and then unset the reference to the
//last array element
foreach($horrorMovies as &$v){
    $v['imdb'] *= 10;
}
unset($v);
print_r($horrorMovies);

//alternatively, one might apply the "transformation" function
//directly to each array element without the need to create a copy
array_walk($horrorMovies, "imdbMultiply");
print_r($horrorMovies);

答案 2 :(得分:0)

如果我理解你的期望,你的imdbMultiply()函数应该与array_map一起使用:

function imdbMultiply($n) {
    $n['imdb'] *= 10;
    return $n;
}

这是你期望的吗?

另一个想法是使用array_walk函数,但你应该像这样定义你的imdbMultiply()函数:

function imdbMultiply(&$n) {
    $n['imdb'] *= 10;
}

array_walk的用法不同:

array_walk($horrorMovies, "imdbMultiply"); 
var_dump($horrorMovies);

答案 3 :(得分:0)

您可以直接使用子数组[imdb]项目。

$horrorMovies = array(
    array(
    "title" => "The babadook",
    "imdb"  => 6.8,
    "rotten" => 98
    ),
    array(
    "title" => "The shining",
    "imdb" => 8.4,
    "rotten" => 87
)

);


foreach($horrorMovies as &$subarray){
    $subarray["imdb"] *= 10;
}

var_dump($horrorMovies);

https://3v4l.org/ub40E

答案 4 :(得分:0)

您只需要进入一个循环并更改“imdb”即可。值,添加下一个 for 循环到您的代码:

for ($i=0; $i<count($horrorMovies); $i++){
    $horrorMovies[$i]['imdb']*=10;
}