【发布时间】:2018-03-30 18:42:36
【问题描述】:
在特殊键上合并数组的最佳做法是什么?
Pseudocode:
If A[i]["name"]==A[j]["name"] and i!=j
then
{
A[i]["desc"]+=A[j]["desc"]
array_slice(A,j,1)
}
和
My Approach:
for ($i=0;$i<count($set);$i++)
{
for($j=0;$j<count($set);$j++)
{
if (($i!=$j) and
(strcmp($set[$i]["name"],$set[$j]["name"]) == 0))
{
$set[$i]["name"].=",".$set[$j]["name"];
array_slice($set,$j,1)
}
}
}
这不像我当前的项目那样工作。相同的实施在其他项目上效果很好。 但我认为有更聪明的方法可以做到这一点。
What it should do:
Before Operation:
A[0]["name"]="Test";
A[0]["desc"]="3,5";
A[1]["name"]="Test";
A[1]["desc"]="8,9";
A[2]["name"]="OtherTest";
A[2]["desc"]="4,3";
After Operation:
A[0]["name"]="Test";
A[0]["desc"]="3,5,8,9";
A[1]["name"]="OtherTest";
A[1]["desc"]="4,3";
【问题讨论】:
-
能否显示数组的一部分
$set请 -
嗯。也许是一个 array_intersect 类型的函数来减少你正在比较的内容?老实说,对我来说,没有什么能真正暗示自己。最终可能会得到一个使用类似循环的解决方案。
-
我可以看到您正在尝试做什么。问题是
array_slice实际上并没有从数组中删除任何东西。它只是提取并返回其中的一部分。你可能想做unset($set[$j])。这将删除$j处的元素。此外,您似乎在连接name,但您不想将desc相互附加吗? -
$set 看起来像上面的伪代码。
-
是的 unset() 是我需要的功能
标签: php arrays multidimensional-array associative-array