【问题标题】:Finding common words in an array在数组中查找常用词
【发布时间】:2015-10-18 00:49:22
【问题描述】:

我有一个字符串

Fragrances, Beauty & Health (153)
    Skin Care (146)
    Make Up (10)
    Health Care & Instruments (1)
    Hair Care (1)

我正在将它转换成一个数组:

$formatted = array_map('trim', preg_split("/[()]+/", $string, -1, PREG_SPLIT_NO_EMPTY));

结果:

Array
(
    [0] => Fragrances, Beauty & Health
    [1] => 153
    [2] => Skin Care
    [3] => 146
    [4] => Make Up
    [5] => 10
    [6] => Health Care & Instruments
    [7] => 1
    [8] => Hair Care
    [9] => 1
)

...我应该怎么做才能达到想要的结果:

Array
(
    [Fragrances, Beauty & Health] => 153
    [Skin Care] => 146
    [Make Up] => 10
    [Health Care & Instruments] => 1
    [Hair Care] => 1
)

【问题讨论】:

  • 你可以遍历第一个数组并制作相同的第二个,你可以吗?
  • @Varun 不是真的,我本可以这样做,但我需要这样做才能有效,因为我会在每次请求时都这样做。

标签: php arrays string multidimensional-array associative-array


【解决方案1】:
$arr = explode("\n",$array);

$desireArray = array();
foreach($arr as $value)
{
    $val = explode("(",$value);
    $desireArray[trim($val[0])] = trim($val[1],")");
}

print_R($desireArray);

【讨论】:

    【解决方案2】:

    这应该适合你:

    首先只是explode() 每行你的字符串,然后用array_map() 遍历每个元素,然后用() 分割它。

    在此之后,您可以简单地使用array_column() 将第一列用作键,将第二列用作值。

    <?php
    
        $arr = array_column(array_map(function($v){
            return array_map("trim", preg_split("/[()]+/", $v, -1, PREG_SPLIT_NO_EMPTY));
        }, explode(PHP_EOL, $str)), 1, 0);
    
        print_r($arr);
    
    ?>
    

    输出:

    Array
    (
        [Fragrances, Beauty & Health] => 153
        [Skin Care] => 146
        [Make Up] => 10
        [Health Care & Instruments] => 1
        [Hair Care] => 1
    )
    

    编辑:

    你不能有重复的键,所以如果你想保留具有最高价值的那个,你可以这样做:

    $arr = array_map(function($v){
        $arr = array_map("trim", preg_split("/[()]+/", $v, -1, PREG_SPLIT_NO_EMPTY));
        if(!isset($arr[1]))
            $arr[1] = 0;
        return $arr;
    }, explode(PHP_EOL, $str));
    
    usort($arr, function($a, $b){
        return $a[1] - $b[1];
    });
    
    $arr = array_column($arr, 1, 0);
    print_r($arr);
    

    【讨论】:

    • 几乎可以正常工作,但有问题..请参阅:pastebin.com/ZHX2tGrn(计数全错)
    • @3zzy 我的代码工作正常。你不能有重复的钥匙!您可以有 2 个带有键的元素:Face CareSkin Care
    • 哎呀,没注意到。嗯..在技术上是正确的,但我现在必须找到解决方案。不管怎么说,还是要谢谢你! :)
    • @3zzy 想做这样的事情:stackoverflow.com/a/5445310/3933332 ?
    • 如果我可以保留价值较高的那一个,而丢弃其他的,那会起作用。
    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2014-01-30
    • 2010-09-26
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多