我有一个项目数组,其中有 ID、名称等...我想获取它们的通用名称,并获取每个项目的其余名称。我制作了一个脚本,它得到了这个通用名称。这可能不是性能最好的,但它确实有效。这是代码:
$items = array(
array(
'id' => 1,
'name' => 'Knife red big'
),
array(
'id' => 2,
'name' => 'Knife blue big'
),
array(
'id' => 3,
'name' => 'Knife green small'
),
);
$commonWords = array();
foreach($items as $key => $item) {
$testWords = explode(' ', $item['name']);
if(empty($commonWords)) {
$commonWords = $testWords;
} else {
$newCommonWords = array();
foreach($commonWords as $word) {
if(in_array($word, $testWords)) {
$newCommonWords[] = $word;
}
}
$commonWords = $newCommonWords;
$newItemName = str_replace(implode(' ', $commonWords), '', $item['name']);
$items[$key]['altName'] = $newItemName;
}
}
echo "<pre>";
print_r(array(
'items' => $items,
'commonName' => implode(' ', $commonWords)
));
echo "</pre>";
这就是我得到的:
Array
(
[items] => Array
(
[0] => Array
(
[id] => 1
[name] => Knife red big
)
[1] => Array
(
[id] => 2
[name] => Knife blue big
[altName] => Knife blue big
)
[2] => Array
(
[id] => 3
[name] => Knife green small
[altName] => green small
)
)
[commonName] => Knife
)
我的目标是数组中的每个项目都将有新参数altName
,其中将是其名称的其余部分,在本例中是除Knife
之外的所有内容。即使是第一个,我怎样才能实现这样的目标?
最佳答案
诀窍是使用array_intersect构建常用词数组,以及 array_diff构建替代名称:
$items = array(
array(
'id' => 1,
'name' => 'Knife red big'
),
array(
'id' => 2,
'name' => 'Knife blue big'
),
array(
'id' => 3,
'name' => 'Knife green small'
),
);
$commonWords = array();
foreach ($items as $k=>$item) {
if ($k == 0)
$commonWords = explode(' ', $item['name']);
else
$commonWords = array_intersect($commonWords, explode(' ', $item['name']));
}
foreach ($items as $k=>$item) {
$name_array = explode(' ', $item['name']);
$altName_array = array_diff($name_array, $commonWords);
$items[$k]['altName'] = implode(' ', $altName_array);
}
var_dump($commonWords);
var_dump($items);
结果:
array (size=1)
0 => string 'Knife' (length=5)
array (size=3)
0 =>
array (size=3)
'id' => int 1
'name' => string 'Knife red big' (length=13)
'altName' => string 'red big' (length=7)
1 =>
array (size=3)
'id' => int 2
'name' => string 'Knife blue big' (length=14)
'altName' => string 'blue big' (length=8)
2 =>
array (size=3)
'id' => int 3
'name' => string 'Knife green small' (length=17)
'altName' => string 'green small' (length=11)
关于php - 获取数组中项目的通用名称并保存每个项目的其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39117658/