0

所以我有一个多维数组。
每个子数组都包含一个 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')
)

这样我就可以很容易地找到所有相关/匹配的项目。

注意:那些带有 Key=3 的条目......这就是让我搞砸的一点。一个简单的 foreach 不会完成这项工作。我尝试遍历原始数组,查看是否设置了一个键,如果没有,则创建一个...然后提取 ID 并将它们分配给具有该键的新数组。但我似乎从来没有赶上“后退”。

不 - 没有代码,因为到目前为止我所管理的只是一个简单的 foreach 和 new key->IDs 数组,它失败了。

我四处搜索 - 但似乎没有任何东西可以解决这个问题(我觉得很奇怪,因为我认为将产品添加到数据库等很常见)。

4

1 回答 1

1

好吧,试试这个。之后,您将拥有一个包含每个键一次的数组和一个包含所有 id 但每个 id 最大一次的数组。如果你想要一个字符串,你可以用# implode() 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 */
于 2013-10-30T10:34:12.230 回答