【问题标题】:string combining out of arrays字符串组合出数组
【发布时间】:2013-03-03 17:33:24
【问题描述】:

我有一个二维数组,它返回这个值:

Array ( 
   [0] => Array ( 
          [0] => wallet,pen 
          [1] => perfume,pen 
   ) 
   [1] => Array ( 
          [0] => perfume, charger 
          [1] => pen,book 
   ).

除此之外,我想知道是否有可能创建一个函数,以这种方式组合数组,并创建一个新的:

如果例如[0] => Array ( [0] => wallet,pen [1] => perfume,pen ) 那么应该等于 [0] => Array ( [0] => wallet,pen, perfume ) 因为有一个通用词,否则什么也不做。

然后将每个单词检索为字符串以进行进一步操作。


我怎样才能使这样一个数组的值唯一。 Array ( [0] => Array ( [0] => wallet [1] => pen [2] => perfume [3] => pen) )因为有两次笔我希望它以这种方式被删除( [0] => Array ( [0] => wallet [1] => pen [2] => perfume) )

【问题讨论】:

  • 嗯,它是组合2个数组的结果
  • 没有人会为你编写完整的代码。您必须使用自己的大脑并尝试编写它。如果你失败了——你可以展示你的代码,有人会帮助你。这就是 stackoverflow 的工作原理。
  • 我不是在寻找代码而是在寻找提示,如果您知道我可以使用更好的数据结构
  • @StringerB 我将为您提供工具,由您来尝试。完成这项工作所需的功能:loops, explode(), implode(), trim()。好编码!

标签: php arrays compare


【解决方案1】:

这只是映射数组和组合内部数组的问题:

$x = [['wallet,pen', 'perfume,pen'], ['perfume,charger', 'pen,book']];

$r = array_map(function($item) {
    return array_unique(call_user_func_array('array_merge', array_map(function($subitem) {
        return explode(',', $subitem);
    }, $item)));
}, $x);

Demo

这首先根据逗号分割所有字符串。然后将它们与array_merge() 合并在一起,并使用array_unique() 删除重复项。

另请参阅:call_user_func_array()array_map()

【讨论】:

    【解决方案2】:

    试试这个:

    $array = Array (Array ( "wallet,pen", "perfume,pen" ), Array ( "perfume, charger", "pen,book" ));
    $res   = array();
    foreach($array as $key=>$val){
       $temp  = array();
       foreach($val as $k=>$v){
         foreach(explode(",",$v) as $vl){
            $temp[]  = $vl;
         }
       }
       if(count(array_unique($temp)) < count($temp)){
         $res[$key] = implode(",",array_unique($temp));
       }
       else{
         $res[$key] = $val;
       }
    }
    
    echo "<pre>";
    print_r($res);
    

    输出:

    Array
    (
        [0] => wallet,pen,perfume
        [1] => Array
            (
                [0] => perfume, charger
                [1] => pen,book
            )
    
    )
    

    【讨论】:

    • 已编辑答案请立即查看
    • 我尝试了你的方法,但似乎它只工作一次,我添加了一个具有相似值的数组,但它什么也没做。感谢您的意见。
    猜你喜欢
    • 2018-03-05
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 2020-07-21
    • 2017-02-09
    • 2011-11-30
    相关资源
    最近更新 更多