【问题标题】:Inserting only unique values into an array仅将唯一值插入数组
【发布时间】:2010-03-26 15:47:36
【问题描述】:

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

$valsArray = array(); 

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

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

【问题讨论】:

  • 为什么不为此使用 assoc 数组?

标签: php arrays associative-array


【解决方案1】:

$valsArray = array_unique($valsArray);

【讨论】:

    【解决方案2】:

    当您遍历您的值时,您可以执行以下操作:

    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 ) 
    

    【讨论】:

      【解决方案3】:
      @$valsArray[$val]++;
      

      应该为你做。新条目被添加为值为 1 的键,现有条目的值增加。 @ 避免了每次遇到新值时都抛出 E_NOTICE。

      【讨论】:

      • 当元素尚不存在时会产生 E_NOTICE 级错误。
      • @chris 不幸的是,这是真的,尽管这是一个非常好的答案,并且在 zaf 之前首先出现。我想对于未来有同样问题的读者,我会选择 zaf 的答案,因为它更完整。
      • 啊,我没有意识到它产生了错误。德拉特。感谢您指出了这一点。我会编辑像 zaf's 这样的东西,但他已经做得很好了,所以我将把我的作为一个较短的不太好的方法的例子。
      • 添加了@以使其更干净:)
      • @Sparr,我现在很好奇,哪个更好? @ 是否只是抑制警告(即它仍然被触发,只是不显示)?
      【解决方案4】:

      你不能在完成添加后直接$valsArray = array_unique($valsArray); 吗?还是您需要按正确顺序保存密钥?

      【讨论】:

      • 它们不需要按正确的顺序排列,这是一种方法。但是如果我这样做,我会丢失有关他们计数的信息(例如,orange 被回答了 5 次,或者 apple 被选为回答 15 次)。使用关联数组,可以将它们的计数存储为 $value$key
      【解决方案5】:

      【讨论】:

      • @tombom,我不同意。该链接指向权威的 php 文档,其中包括一个很好的描述 + 使用示例。花时间复制持久资源并不是一种很好的时间利用方式。如果我链接到一些随机的无名博客……那么我可能会同意。但总的来说,指向重点信息的超链接非常棒,非常适合作为这里的答案。
      猜你喜欢
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2023-04-02
      • 2013-01-14
      • 2022-01-24
      相关资源
      最近更新 更多