Php 在数组中查找公共字

Php 在数组中查找公共字,php,arrays,string,multidimensional-array,associative-array,Php,Arrays,String,Multidimensional Array,Associative Array,我有一个字符串: 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)); 结果: A

我有一个字符串

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
)

这应该适合您:

首先,只需按每行显示字符串,然后使用遍历每个元素,并按
将其拆分

在此之后,您可以简单地使用第一列作为键,第二列作为值

<?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);

?>
编辑:

您不能有重复的关键点,因此如果要保留具有最高值的关键点,可以执行以下操作:

$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);

你可以在第一个数组中循环,然后做同样的第二个数组,你同意吗?@Varun不是真的,我可以这样做,但我需要这样做才能有效率,因为我会在每个请求中都这样做。几乎有效,但有些东西会绊倒它。。请看:(计数全错)@3zzy我的代码运行良好。你不能有重复的钥匙!按此键可以有两个元素:
面部护理
皮肤护理
啊,见鬼,没注意到。隐马尔可夫模型。。技术上是正确的,但我现在必须找到解决方案。无论如何,谢谢!:)@3zzy想做这样的事情:?如果我能保留价值更高的一个,然后丢弃其他的,那就行了。
$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);
$arr = explode("\n",$array);

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

print_R($desireArray);