这是我将用于过滤的输入数组。
[TESTING] => Array
(
[0] => Array
(
[a] => false
[b] => WCP
[c] => Title A
)
[1] => Array
(
[a] => false
[b] => WCP
[c] => Title B
)
[2] => Array
(
[a] => false
[b] => WCP
[c] => Title C
)
)
我想删除具有以下两者的重复记录:keys [a]和[b]具有相同的值。我不想使用[c]作为删除重复记录的条件。这种情况下的输出应为。
[TESTING] => Array
(
)
因为所有3个子数组都具有键[a]的值,而键[b]具有相同的值。我使用array_unique()
但是这个函数使用所有3 [a],[b]和[c]作为条件来删除我不想要的重复记录。我没有得到我想要的输出。
需要帮助。有什么建议或想法吗?
答案 0 :(得分:0)
PHP中的数组函数主要用于2D数组。您将需要迭代多维数组,进行键值的比较,然后将正确的结果分配给保持数组。保持数组需要一个范围,允许多维迭代通过多维数组的上层。这可以作为array_filter使用的函数来完成;或者,通过独立的重新分配完成。
答案 1 :(得分:0)
试试这个,
function clearDuplicates($array)
{
$new_array=array();
for($i=0;$i<count($array);$i++)
{
$x=false;
for($j=0;$j<count($array);$j++)
if($j!=$i)
if($array[$i]["a"]==$array[$j]["a"] && $array[$i]["b"]==$array[$j]["b"])
$x=true;
if(!$x)
$new_array[]=$array[$i];
}
return new_array;
}
答案 2 :(得分:0)
如果您发现问题很有用,这是您的问题的解决方案: -
}
int multiply (int a){
return 5 * a;
}
void run()
{
int threadCount = 5;
Task[] workers = new Task[threadCount];
Task.Factory.StartNew(consumer);
for (int i = 0; i < threadCount; ++i)
{
int workerId = i;
Task task = new Task(() => worker(workerId));
workers[i] = task;
task.Start();
}
for (int i = 0; i < 100; ++i)
{
Console.WriteLine("Queueing work item {0}", i);
inputQueue.Add(i);
Thread.Sleep(50);
}
Console.WriteLine("Stopping adding.");
inputQueue.CompleteAdding();
Task.WaitAll(workers);
outputQueue.CompleteAdding();
Console.WriteLine("Done.");
Console.ReadLine();
}
void worker(int workerId)
{
Console.WriteLine("Worker {0} is starting.", workerId);
foreach (int workItem in inputQueue)
{
int b= multiply(workItem);
data.Add(b);
Console.WriteLine("Worker {0} is processing item {1}." ,workerId,b);
Thread.Sleep(100); // Simulate work.
outputQueue.Add(workItem); // Output completed item.
}
Console.WriteLine("Worker {0} is stopping.", workerId);
}
void consumer()
{
Console.WriteLine("Consumer is starting.");
foreach (var workItem in outputQueue.GetConsumingEnumerable())
{
Console.WriteLine("Consumer is using item {0}", workItem);
Thread.Sleep(25);
}
Console.WriteLine("Consumer is finished.");
}
BlockingCollection<int> inputQueue = new BlockingCollection<int>();
BlockingCollection<int> outputQueue = new BlockingCollection<int>();
}