Php 如何比较拼接多维阵列(具有大量数据)?
我有一个巨大的数组Php 如何比较拼接多维阵列(具有大量数据)?,php,multidimensional-array,associative-array,array-difference,array-splice,Php,Multidimensional Array,Associative Array,Array Difference,Array Splice,我有一个巨大的数组$properties,包含大约50万个项目: array(470000) { ["12345"]=> array(5) { ["dateTime"]=> string(19) "2016-10-12 19:46:25" ["fileName"]=> string(46) "monkey.jpg" ["path"]=> string(149) "Volumes/a
$properties
,包含大约50万个项目:
array(470000) {
["12345"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 19:46:25"
["fileName"]=>
string(46) "monkey.jpg"
["path"]=>
string(149) "Volumes/animals/monkey.jpg"
["size"]=>
string(7) "2650752"
}
["678790"]=>
array(5) {
["dateTime"]=>
string(19) "2016-10-12 14:39:43"
["fileName"]=>
string(45) "elephant.jpg"
["path"]=>
string(171) "Volumes/animals/elephant.jpg"
["size"]=>
string(7) "2306688"
}
... and so on.
因此,为了提高性能,我将其拼接成了几个部分:
$splice_size = 10000;
$count_arr = (count($properties)/$splice_size)-1;
For($i=0; $i<$count_arr; $i++){
$res[] = array_splice($properties, 0,$splice_size);
}
$res[] = array_splice($properties, 0,count($properties));
现在,我想比较两种阵列:
function array_diff_assoc_recursive($array1, $array2)
{
foreach($array1 as $key => $value)
{
if(is_array($value))
{
if(!isset($array2[$key]))
{
$difference[$key] = $value;
}
elseif(!is_array($array2[$key]))
{
$difference[$key] = $value;
}
else
{
$new_diff = array_diff_assoc_recursive($value, $array2[$key]);
if($new_diff != FALSE)
{
$difference[$key] = $new_diff;
}
}
}
elseif(!isset($array2[$key]) || $array2[$key] != $value)
{
$difference[$key] = $value;
}
}
return !isset($difference) ? 0 : $difference;
}
echo "<pre>";
print_r(array_diff_assoc_recursive($new, $res));
echo "</pre>";
函数数组\u diff\u assoc\u递归($array1,$array2)
{
foreach($array1作为$key=>$value)
{
if(是_数组($value))
{
如果(!isset($array2[$key]))
{
$difference[$key]=$value;
}
elseif(!is_数组($array2[$key]))
{
$difference[$key]=$value;
}
其他的
{
$new_diff=array_diff_assoc_recursive($value,$array2[$key]);
如果($new_diff!=FALSE)
{
$difference[$key]=$new_diff;
}
}
}
elseif(!isset($array2[$key])| |$array2[$key]!=$value)
{
$difference[$key]=$value;
}
}
返回!设置($difference)?0:$difference;
}
回声“;
$different = [];
$missingFrom2 = [];
foreach ($array1 as $key => $value) {
if (!isset($array2[$key])) { $missingFrom2[] = $key; }
if ($array2[$key] != $value) { $different[] = $key; }
}
$missingFrom1 = array_diff(array_keys($array2), array_keys($array1));
打印(数组差异关联递归($new,$res));
回声“;
$different = [];
$missingFrom2 = [];
foreach ($array1 as $key => $value) {
if (!isset($array2[$key])) { $missingFrom2[] = $key; }
if ($array2[$key] != $value) { $different[] = $key; }
}
$missingFrom1 = array_diff(array_keys($array2), array_keys($array1));
但系统崩溃了。太多的数据。所以我的问题是,它们一定是拼接阵列(如制作块)的一个优势,而我仍然没有得到,以获得更好的性能。如果我是你,我会:
$different
将是所有不同的键
你所做的似乎有点过于精心设计,没有什么特别的好处
示例:
通过比较它们,您想要达到什么目的?例如,如果有错误。在一个数组中它是
monkey
,在另一个数组中它是munkey
。应该能找到它。适用于较小的阵列。但是大问题会使代码变得更短,但我不认为这是必要的。最后将数组复制成块,这实际上使内存需求增加了一倍。我要做的只是在已经存在的数组中进行一个循环为什么在数组中的多个偏移处有相同的值?如果你有“猴子”和“芒基”,你怎么知道哪一个是错的?你的解释毫无意义。@symcbean我假设它们有第二个数组,该数组具有相同的键,并且可能与某些匹配键的值略有不同。这是对代码进行度量的唯一方法,但不幸的是,我的结果是array(0){}
,即使在array1中我编写了monkey
,在array2中我编写了monkei
@Jarla,你能分享你尝试过但没有成功的内容吗?这是已经分块的数组吗?如果你不分块数组,这个答案就行了。我只是想在这个答案中指出,你不需要分块数组。这是不必要的复杂性,并消耗更多的内存。