Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅将唯一值插入数组_Php_Arrays_Associative Array - Fatal编程技术网

Php 仅将唯一值插入数组

Php 仅将唯一值插入数组,php,arrays,associative-array,Php,Arrays,Associative Array,我有一组值,我按它们出现的顺序将它们放入数组中 $valsArray = array(); //I process each value from a file (code removed for simplicity) //and then add into the array $valsArray[] = $val; 如何将其转换为关联数组,而不是仅当值不存在时才插入值(作为关联数组的$key)。如果它确实存在,则将其计数($value of associative array)

我有一组值,我按它们出现的顺序将它们放入数组中

$valsArray = array(); 

//I process each value from a file (code removed for simplicity) 
//and then add into the array 
$valsArray[] = $val; 

如何将其转换为关联数组,而不是仅当值不存在时才插入值(作为关联数组的
$key
)。如果它确实存在,则将其计数(
$value of associative array
)增加1。我正试图找到一种比现在更有效的方法来处理这些值

你就不能
$valsArray=array\u unique($valsArray)添加完成后?或者你需要把钥匙按正确的顺序放好吗

@$valsArray[$val]++;

我应该为你做这件事。新条目作为值为1的键添加,现有条目的值递增。避免每次遇到新值时抛出E_通知。

在循环遍历值时,可以执行以下操作:

isset( $valsArray[$val] ) ? $valsArray[$val]++ : $valsArray[$val]=1;
例如:

$valsArray=array();

$val="foo";
isset($valsArray[$val])?$valsArray[$val]++:$valsArray[$val]=1;
$val="foo";
isset($valsArray[$val])?$valsArray[$val]++:$valsArray[$val]=1;
$val="bar";
isset($valsArray[$val])?$valsArray[$val]++:$valsArray[$val]=1;

print_r($valsArray);
将为您提供:

Array ( [foo] => 2 [bar] => 1 ) 

尝试查看以下文档


$valsArray=($valsArray)

为什么不使用assoc数组呢?它们不需要按正确的顺序排列,所以这是一种方法。但是如果我这样做,我会丢失有关他们计数的信息(例如,
orange
被回答了5次,或者
apple
被选择了15次作为回答)。使用关联数组,可以将它们的计数存储为
$key
$value
,当元素还不存在时,将生成E_通知级别的错误。@chris不幸的是,这是正确的,尽管这是一个非常好的答案,并且在zaf之前出现。我想对于将来有同样问题的读者,我会选择zaf的答案,因为它更完整。啊,我没有意识到它产生了一个错误。德拉特。谢谢你指出这一点。我会编辑一些像zaf的东西,但他已经做得很好了,所以我将留下我的作为一个例子,说明更短更不好的方法。添加了@to make it clear:)@Sparr,我现在很好奇,哪种做法更好?
@
是否只是抑制了警告(即它仍然被触发,只是没有显示)?@tombom,我不同意。该链接指向Authoritive php文档,其中包含一个很好的描述和使用示例。花时间复制一个持久的资源不是对时间的好利用。如果我链接到某个随机的无名博客……那么我可能会同意。但总的来说,指向重点信息的超链接非常棒,并且非常适合作为这里的答案。