我正在尝试将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";
}
}
我哪里错了?有没有办法将数据类型保留为十进制?
答案 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';
}
}
}
不优雅,但它可以解决问题。