所以我有一个多维数组。
每个子数组都包含一个 ID 值...1+ 个 ID,由哈希分隔。
array(
array('name'=>'this', 'ids'=>'x'),
array('name'=>'this', 'ids'=>'x#y'),
array('name'=>'this', 'ids'=>'x#y#z'),
array('name'=>'this', 'ids'=>'y'),
array('name'=>'this', 'ids'=>'z#b#a'),
array('name'=>'this', 'ids'=>'d'),
array('name'=>'this', 'ids'=>'e'),
array('name'=>'this', 'ids'=>'f#g'),
array('name'=>'this', 'ids'=>'d#g')
)
现在,如您所见,其中一些具有共同的ID...但有时它是多个,有时只是 n 中的 1 个,或者没有。
我需要做的是为每个子数组添加一个 Key,如果它们相关,则具有相同的 Key。
因此;
array(
array('key'=>'1', 'name'=>'this', 'ids'=>'x'),
array('key'=>'1', 'name'=>'this', 'ids'=>'x#y'),
array('key'=>'1', 'name'=>'this', 'ids'=>'x#y#z'),
array('key'=>'2', 'name'=>'this', 'ids'=>'y'),
array('key'=>'1', 'name'=>'this', 'ids'=>'z#b#a'),
array('key'=>'3', 'name'=>'this', 'ids'=>'d'),
array('key'=>'4', 'name'=>'this', 'ids'=>'e'),
array('key'=>'3', 'name'=>'this', 'ids'=>'f#g'),
array('key'=>'3', 'name'=>'this', 'ids'=>'d#g')
)
这样我就可以很容易地找到所有相关/匹配的项目。
注意:那些键=3的条目......这就是把我搞砸的一点。一个简单的foreach不会完成这项工作。我尝试遍历原始数组,查看是否设置了 Key,如果没有,请创建一个......然后提取 ID 并将它们分配给具有该密钥的新数组。但我似乎从未抓住"后退的举动"。
不 - 没有代码,因为到目前为止我管理的只是一个简单的 foreach 和新的 key->ID 数组,它失败得很惨。
我已经搜索了 - 但似乎没有任何方法可以解决这个问题(我觉得很奇怪,因为我认为将产品添加到数据库等很常见)。
好的,试试这个。之后,你有一个数组,每个键一次,一个包含所有 id 的数组,但每个 id 最多一次。如果你想要一个字符串,你可以用 # 来内爆 ids 数组。
<?php
$data = array(
array('name'=>'this', 'ids'=>'x'),
array('name'=>'this', 'ids'=>'x#y'),
array('name'=>'this', 'ids'=>'x#y#z'),
array('name'=>'this', 'ids'=>'y'),
array('name'=>'this', 'ids'=>'z#b#a'),
array('name'=>'this', 'ids'=>'d'),
array('name'=>'this', 'ids'=>'e'),
array('name'=>'this', 'ids'=>'f#g'),
array('name'=>'this', 'ids'=>'d#g')
);
$keyedData = array();
foreach($data as $k => $r) {
$newArr = $r;
$newArr['key'] = $k;
$newArr['related_to'] = array();
$idArr = explode('#', $r['ids']);
foreach($idArr as $id) {
foreach($data as $kkey => $kd) {
if(strpos($kd['ids'], $id) === false)
continue;
$newArr['related_to'][] = $kkey;
}
$newArr['related_to'] = array_unique($newArr['related_to']);
}
$keyedData[] = $newArr;
}
echo'<pre>'; var_dump($keyedData);
/* EOF */