0

我试图制作一个包含两列的多维数组。名称和计数器。我可以用所有的名字做一个数组。但我不知道如何使它多维并且仍然能够更新计数器。到目前为止我得到的代码是

if (!in_array($prodname, $da)){
    array_push($da, $prodname);
}

然后我可以用 foreach 把它倒出来。我如何使它成为二维的?我怎么说好吧,这存在更新旧值?等等

4

2 回答 2

1

假设你想$da看起来像这样:

Array(
   "name1" => array("score1" => 80, "score2" => 100),
   "name2" => array("score1" => 50, "score2" => 60),
   "name3" => array("score1" => 90, "score2" => 80),
   ...
)

然后你需要做的就是:

function setScore($prodName, $scoreName, $score)
{
    global $da;
    if (!array_key_exists($prodName, $da)) {
        $da[$prodName] = array();
    }
    $da[$prodName][$scoreName] = $score;
}

setScore("name1", "score1", 80);
setScore("name1", "score2", 100);
setScore("name2", "score1", 50);
...

除非我误解了你的问题,这是很有可能的。

于 2013-01-23T02:15:06.540 回答
1

如果您只需要名称和计数器,那么您应该能够使用普通数组:

$nameCountArray = array();
foreach($names as $name){
    if(!array_key_exists($name,$nameCountArray)){
        $nameCountArray[$name] = 1;
    }else{
        $nameCountArray[$name] = $nameCountArray[$name] + 1;
    }
}

如果您确实需要多维数组,这些只是数组的数组,可以这样访问。一个很好的例子是使用二维数组来存储位置(比如在 3 x 3 网格上):

$twoDArray = array(
                  0 => array(0 => 1,
                             1 => 4,
                             2 => 7), 
                  1 => array(0 => 2,
                             1 => 5,
                             2 => 8), 
                  2 => array(0 => 3,
                             1 => 6,
                             2 => 9)
              );

//Grab the item at 1,2
$item = $twoDArray[1][2];//Will give '8'
于 2013-01-23T02:20:36.117 回答