Php 使用另一个数组中的值创建和数组,但仅当该值出现一定次数时

Php 使用另一个数组中的值创建和数组,但仅当该值出现一定次数时,php,arrays,Php,Arrays,我希望有人能帮忙 我在数组中有值。。比方说 $array = ("BMW", "BMW", "BMW", "AUDI", "AUDI", "FORD", "FORD", "FORD"); 所以我想计算这些值。我可以使用array\u count\u值($array)来实现这一点 这将创建另一个数组,其中包含BMW=>3、AUDI=>2、

我希望有人能帮忙

我在数组中有值。。比方说

$array = ("BMW", "BMW", "BMW", "AUDI", "AUDI", "FORD", "FORD", "FORD");
所以我想计算这些值。我可以使用
array\u count\u值($array)来实现这一点

这将创建另一个数组,其中包含
BMW=>3、AUDI=>2、FORD=>3

所以我现在想做的是把宝马和福特换成另一个阵营,因为他们发生了三次,把奥迪甩在了后面

有什么想法吗


非常感谢

此代码将帮助您
首先在新数组中添加所需的元素(
$newArray

然后使用
数组_diff
并更新第一个数组

<?php

$array = ["BMW", "BMW", "BMW", "AUDI", "AUDI", "FORD", "FORD", "FORD"];
$countArray = (array_count_values ($array));

function youCondition($countArray, $element) {
    return $countArray[$element] == 3;
}

$newArray = [];
for ($i=0; $i < count($array); $i++) { 
    // put any condition that you want here
    if (youCondition($countArray, $array[$i])) {
        $newArray[] = $array[$i];
    } 
}

// your new generated array
print_r($newArray);
$array = array_diff($array, $newArray);

// your updated array
print_r($array);



您可以更改您的条件(
$countArray[$array[$i]]==3
),并制作不同的数组

,因为每个人都在四处寻找答案,让我也不要错过。。。。如果您只需要在
$array
中出现频率最高的品牌,只需使用array_过滤器过滤与最大出现次数匹配的品牌即可。最后,您可以提取这些密钥,通过数组_密钥获得品牌

<?php

$array = array("BMW", "BMW", "BMW", "AUDI", "AUDI", "FORD", "FORD", "FORD");
$frequencies = array_count_values($array);
$max = max(array_values($frequencies));

// If you don't want to do this dynamically you can simply change the
// filter condition of course.
$filtered = array_filter($frequencies, function ($val) use ($max) {
    // Since you mentioned you work with hard coded values,
    // you could change it to
    // return $val >= 3;
    return $val === $max;
});

$filteredBrands = array_keys($filtered);
$allBrands = array_keys($frequencies);
// We can then exclude the filtered set
// from the entire set to separate them
// into two sets.
$difference = array_diff($allBrands, $filteredBrands);

print_r($filteredBrands);
echo '</br>';
print_r($difference);
echo '</br>';

欢迎!堆栈溢出不是代码编写服务。我们总是很乐意帮助和支持新的程序员,但你需要先帮助自己。您应该尝试自己编写代码。请阅读和。您只想要出现最频繁的品牌?再次循环它们并将它们收集到不同的数组中?这会给您一个提示,如果您以这种方式硬编码计数3,您最好从一开始就硬编码数组。。。。同样OP也没有明确说明一个通用的解决方案是什么样子的,所以你如何回答这个问题。我现在让它更具动态性。非常感谢!我已经根据自己的需要将==改为>,效果非常好。;-)不客气,如果我的回答对你的问题有帮助,如果你愿意选择最好的答案,我将不胜感激。
<?php

$array = array("BMW", "BMW", "BMW", "AUDI", "AUDI", "FORD", "FORD", "FORD");
$frequencies = array_count_values($array);
$max = max(array_values($frequencies));

// If you don't want to do this dynamically you can simply change the
// filter condition of course.
$filtered = array_filter($frequencies, function ($val) use ($max) {
    // Since you mentioned you work with hard coded values,
    // you could change it to
    // return $val >= 3;
    return $val === $max;
});

$filteredBrands = array_keys($filtered);
$allBrands = array_keys($frequencies);
// We can then exclude the filtered set
// from the entire set to separate them
// into two sets.
$difference = array_diff($allBrands, $filteredBrands);

print_r($filteredBrands);
echo '</br>';
print_r($difference);
echo '</br>';