使用array_count_values并获取"只能计算STRING和INTEGER值!"错误

时间:2014-06-11 15:23:48

标签: php arrays laravel-4

我正在尝试将4个数组添加到一个数组($all_prices)中,然后针对$all_prices检查每个单独数组中每个键的值,以确保它们是唯一的。如果不是,我想在if的末尾添加0以使其唯一(因此0.50变为0.500)。

由于某种原因,我收到了以下错误,尽管我已经将数据类型从十进制更改为varchar:

  

array_count_values():只能计算STRING和INTEGER值!

修改 这是dd($ all_prices)

的片段
array(4) { [0]=> array(9) { ["14.45"]=> string(8) "sample 1" ["12.40"]=> 
string(8) "sample 2" ["14.13"]=> string(8) "sample 3" ["15.11"]=> 
string(8) "sample 4"

代码:

$all_prices   = [$list_a_prices, $list_b_prices, $list_c_prices, $list_d_prices];
$price_count  = array_count_values($all_prices);

foreach($list_b_prices as $key => $value){
    if($price_count[$key] >= 2){
        $key . "0";
    }
}

我哪里错了?有没有办法将数据类型保留为十进制?

2 个答案:

答案 0 :(得分:1)

我认为你不应该按价格编制索引,毕竟从数学的角度来看,5.0和5.00根本没有差别。

如果您要从数据库中获取值,那么无处不在。所以你必须为密钥转换(int)$ key。

在你的foreach中,你正在改变一个临时变量。 $ key仅存在于您希望将其声明为:

的循环的当前迭代中
foreach($list_b_prices as &(int)$key => $value){
    if($price_count[$key] >= 2){
        $key . "0";
    }
}

注意&符号和转换为整数。虽然我不确定哪个会先出现。但同样:我认为通过一些不同的值进行索引会给你一个更好的结果。

答案 1 :(得分:1)

嵌套循环怎么样?

$all_prices   = [$list_a_prices, $list_c_prices, $list_d_prices];

foreach($list_b_prices as $key => $value){
    foreach($all_prices as $array){
        if(isset($array[$key])){
            $list_b_prices[$key] .= '0';
        }
    }
}

不优雅,但它可以解决问题。