Php 如何从数组中较大的字符串中选取一个字符串,并使用名称对其进行分组?

Php 如何从数组中较大的字符串中选取一个字符串,并使用名称对其进行分组?,php,Php,我有一个php脚本数组 $carstable = array( "tbl_Volvo_01_05_16", "tbl_Volvo_02_05_16", "tbl_Volvo_03_05_16", "tbl_Volvo_04_05_16", "tbl_BMW_01_05_16", "tbl_BMW_02_05_16", "tbl_BMW_03_05_16", "tbl_BMW_04_05_16", "tbl_Toyota_0

我有一个php脚本数组

 $carstable = array(
    "tbl_Volvo_01_05_16",
    "tbl_Volvo_02_05_16",
    "tbl_Volvo_03_05_16",
    "tbl_Volvo_04_05_16",
    "tbl_BMW_01_05_16",
    "tbl_BMW_02_05_16",
    "tbl_BMW_03_05_16",
    "tbl_BMW_04_05_16",
    "tbl_Toyota_01_05_16",
    "tbl_Toyota_02_05_16",
    "tbl_Toyota_03_05_16",
    "tbl_Toyota_04_05_16");
这个数组是由系统生成的。我想从中得到另一个数组,它只包含上面数组中提到的汽车列表。 我希望该数组类似于:

$cars =array("Volvo","BMW","Toyota");

使用foreach并使用
分解值
,并将其存储到最终数组中。现在应用array_unique以获得唯一的数组值

$carstable = array(
    "tbl_Volvo_01_05_16",
    "tbl_Volvo_02_05_16",
    "tbl_Volvo_03_05_16",
    "tbl_Volvo_04_05_16",
    "tbl_BMW_01_05_16",
    "tbl_BMW_02_05_16",
    "tbl_BMW_03_05_16",
    "tbl_BMW_04_05_16",
    "tbl_Toyota_01_05_16",
    "tbl_Toyota_02_05_16",
    "tbl_Toyota_03_05_16",
    "tbl_Toyota_04_05_16"
);

$final = array();
foreach($carstable as $val){
    $tmp = explode("_", $val);
    $final[] = $tmp[1]; 
}

echo '<pre>';
print_r(array_values(array_unique($final)));

您可能需要执行以下操作:

<?php
$carstable = array(
    "tbl_Volvo_01_05_16",
    "tbl_Volvo_02_05_16",
    "tbl_Volvo_03_05_16",
    "tbl_Volvo_04_05_16",
    "tbl_BMW_01_05_16",
    "tbl_BMW_02_05_16",
    "tbl_BMW_03_05_16",
    "tbl_BMW_04_05_16",
    "tbl_Toyota_01_05_16",
    "tbl_Toyota_02_05_16",
    "tbl_Toyota_03_05_16",
    "tbl_Toyota_04_05_16");
$newArray = array();
foreach ($carstable as $value) {
  $carArray = explode('_',$value);
  if (isset($carArray[1])) {
    $newArray[] = $carArray[1];
  }  
}
print_r(array_unique($newArray));

在数组中循环并用“\ux”将其分解


一个简短的片段,也适用于阿尔法·罗密欧

Array
(
    [0] => Volvo
    [1] => BMW
    [2] => Toyota
    [3] => Alfa_Romeo
)
将导致:

<?php

$carstable = array(
    "tbl_Volvo_01_05_16",
    "tbl_Volvo_02_05_16",
    "tbl_Volvo_03_05_16",
    "tbl_Volvo_04_05_16",
    "tbl_BMW_01_05_16",
    "tbl_BMW_02_05_16",
    "tbl_BMW_03_05_16",
    "tbl_BMW_04_05_16",
    "tbl_Toyota_01_05_16",
    "tbl_Toyota_02_05_16",
    "tbl_Toyota_03_05_16",
    "tbl_Toyota_04_05_16"
);

$cars = array_map(function($v){
    preg_match("/tbl_([^_]+)/", $v, $t);
    return $t[1];
}, $carstable);

$cars = array_unique($cars);

var_dump($cars);

另一种使用
array\u map
array\u unique
preg\u match
支持不同字符串结构的方法:

array(3) {
  [0]=>
  string(5) "Volvo"
  [4]=>
  string(3) "BMW"
  [8]=>
  string(6) "Toyota"
}

只有汽车名称和唯一的数组值…Alfa_Romeo
btw会发生什么?对不起,我没听清楚。@u_mulder看到我的答案。@u_mulder,OP的问题在哪里?@FrayneKonok u_muler在另一个答案的评论中提到。天真地向每一个
吐痰对这样的品牌不起作用。
Array
(
    [0] => Volvo
    [1] => BMW
    [2] => Toyota
    [3] => Alfa_Romeo
)
<?php

$carstable = array(
    "tbl_Volvo_01_05_16",
    "tbl_Volvo_02_05_16",
    "tbl_Volvo_03_05_16",
    "tbl_Volvo_04_05_16",
    "tbl_BMW_01_05_16",
    "tbl_BMW_02_05_16",
    "tbl_BMW_03_05_16",
    "tbl_BMW_04_05_16",
    "tbl_Toyota_01_05_16",
    "tbl_Toyota_02_05_16",
    "tbl_Toyota_03_05_16",
    "tbl_Toyota_04_05_16"
);

$cars = array_map(function($v){
    preg_match("/tbl_([^_]+)/", $v, $t);
    return $t[1];
}, $carstable);

$cars = array_unique($cars);

var_dump($cars);
array(3) {
  [0]=>
  string(5) "Volvo"
  [4]=>
  string(3) "BMW"
  [8]=>
  string(6) "Toyota"
}