【问题标题】:Merge arrays with strings and delete repetitive values in PHP将数组与字符串合并并删除 PHP 中的重复值
【发布时间】:2017-06-26 01:45:21
【问题描述】:

来自WP_Query 我正在将存储的字符串转储到单独的数组中:

array(1) {
  [0]=>
  string(8) "Portugal"
}
array(1) {
  [0]=>
  string(5) "Spain"
}
array(1) {
  [0]=>
  string(5) "Italy"
}
array(1) {
  [0]=>
  string(6) "Monaco"
}
array(1) {
  [0]=>
  string(5) "Spain"
}
array(1) {
  [0]=>
  string(9) "Lithuania"
}

我正在尝试将这些数组合并为一个数组,删除重复的字符串,如 "Spain" 并获取唯一值的数量。 我试图使用array_merge()

$tester = array();
    foreach($array_string as $value) {
                array_merge($tester, $value);
             }
          $result = array_unique($tester);
         print_r($result);

但是没有任何体面的结果,错误地告诉<b>Warning</b>: array_merge(): Argument #2 is not an array 有人能告诉我哪里漏掉了重点吗?非常感谢所有可能的帮助,期待。

【问题讨论】:

  • $value的类型是什么
  • array_merge 不会更改第一个参数,而是返回结果数组,因此:$tester = array_merge($tester, $value);。但是,使用array_map 可能更优雅。
  • $array_string 是什么?

标签: php arrays wordpress


【解决方案1】:

问题中发布的代码几乎是好的。意图是正确的,但你错过了一件简单的事情:你用一个空数组初始化$tester,然后从不向它添加任何东西。到最后还是空的,array_unique() 也无能为力,也返回了一个空数组。

错误在一行:

array_merge($tester, $value);

array_merge() 不会更改作为参数传递给它的数组。它返回一个您的代码忽略的新数组(而不是将其保存到$tester)。

你的代码应该是这样的:

$tester = array();
foreach($array_string as $value) {
    $tester = array_merge($tester, $value);
}
$result = array_unique($tester);
print_r($result);

解决方案 #2

您可以使用call_user_func_array() 调用array_merge() 并将$array_string 的值作为参数传递。返回的数组包含重复项;将其传递给 array_unique() 会删除它们:

$result = array_unique(call_user_func_array('array_merge', $array_string));

解决方案 #3

完成同样事情的更简单(可能更快)的方法是使用array_column() 将值放入一个数组,然后将其传递给array_unique(),当然:

$result = array_unique(array_column($array_string, 0));

此解决方案仅适用于 PHP 5.5 或更高版本(旧版本中不存在 array_column() 函数。)

【讨论】:

    【解决方案2】:

    要获得合并数组中唯一字符串的数量,您必须在 WP_Query 之前设置空数组

    $tester = array();
    

    WP_Query的while循环中,每个字符串都被放入单独的数组并推送到$tester

    foreach((array)$array_string as $key=>$value[0]) {
               array_push($tester,$value);
                   }
    

    数组$tester 中的唯一值是使用array_unique() 函数找到的,这些函数应该放在WP_Query while 循环之后。

    $unique_array_string = array_unique($tester, SORT_REGULAR);
    
    $unique_string_number =  sizeof($unique_array_string);
    

    【讨论】:

      【解决方案3】:

      您将创建一个数组,并为西班牙等城市名称获取数组的键,它会始终给出不同的城市名称...

           $data= array();    
      
          $data1 = array("Portugal");
          $data2 = array("Spain");
          $data3 = array("Italy");
          $data4 = array("Monaco");
          $data5 = array("Spain");
          $data6 = array("Lithuania");
          $merge = array_merge($data1, $data2,$data3,$data4,$data5,$data6);
      
          $data = array();
      
          foreach($merge as $value) {
      
              $data[$value] = $value;
      
          }
          echo '<pre>',print_r($data),'</pre>';
      

      【讨论】:

      • 在将代码发布为答案之前,您是否尝试过代码? It doesn't work.
      猜你喜欢
      • 2021-06-19
      • 2020-06-23
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      • 2015-02-18
      • 2021-05-25
      相关资源
      最近更新 更多