Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何清理阵列_Php_Arrays - Fatal编程技术网

Php 如何清理阵列

Php 如何清理阵列,php,arrays,Php,Arrays,我有一个数组,它是产品可能具有的所有大小的集合,Magento使用EAV数据库结构使用该数组,因此数组的格式如下 entity_id => 'text', 28709 => 'L' 28734 => 'S' 28732 => 'XL' 28721 => '22B' 28705 => '16' size_entity_id => product_entity_id 28734 => '7314895' 28709 => '7365374'

我有一个数组,它是产品可能具有的所有大小的集合,Magento使用EAV数据库结构使用该数组,因此数组的格式如下

entity_id => 'text',

28709 => 'L'
28734 => 'S'
28732 => 'XL'
28721 => '22B'
28705 => '16'
size_entity_id => product_entity_id

28734 => '7314895'
28709 => '7365374'
28732 => '7382004'
foreach($sizeArray as $_index => $_value)
{
    if(!isset($products[$_index]))
    {
        unset($sizeArray[$_index])
    }
}
我发布的只是一个小样本,数组变得相当大(超过10000个)

现在我有了另一个这样格式化的数组

entity_id => 'text',

28709 => 'L'
28734 => 'S'
28732 => 'XL'
28721 => '22B'
28705 => '16'
size_entity_id => product_entity_id

28734 => '7314895'
28709 => '7365374'
28732 => '7382004'
foreach($sizeArray as $_index => $_value)
{
    if(!isset($products[$_index]))
    {
        unset($sizeArray[$_index])
    }
}
我使用这两个数组的方式是,我对第一个数组的每个数组(以
foreach($sizeArray as$\u index=>$\u value)
的格式)执行一次检查,并使用
isset
检查第二个数组中是否存在该索引

现在我想我可以通过清理第一个数组来改进代码,而不必重新编码其他人的工作,因为第二个数组的大小最多只有10个

我想知道是否有一个很好的简单的解决方案来清理我的第一个阵列,而不必这样做

entity_id => 'text',

28709 => 'L'
28734 => 'S'
28732 => 'XL'
28721 => '22B'
28705 => '16'
size_entity_id => product_entity_id

28734 => '7314895'
28709 => '7365374'
28732 => '7382004'
foreach($sizeArray as $_index => $_value)
{
    if(!isset($products[$_index]))
    {
        unset($sizeArray[$_index])
    }
}
因为如果我这样做,我将遍历数组中的所有值,如果我不这样做并保持代码现在的工作方式,95%的时间它不会遍历整个数组(其他5%的大小将接近数组的末尾,它仍会遍历数组并接近末尾)

注意:代码的工作原理很好,但因为我没有开发它,所以当我不完全理解它时,我不想重新编码其他人的工作,如果我能找到可以改进的地方(即,将使用的阵列从10000个减少到10个),我要做的就是

编辑:好的,我似乎错过了一件事,第一个数组,正如你可以看到的,前3个值是L,S和XL,代表大,小和超大,在我描述的foreach之前有一些代码,对其进行排序,以便S在L之前。这样,我们从最小的尺寸开始,不管产品可能有多大,由于我所采取的示例,如果我保持代码不变,它无法反映数组中的潜在间隙,下面是一个大小介于16和17之间的排序数组示例

##### => '16'
##### => '16A'
##### => '16B'
##### => '16C'
##### => '16S'
##### => '16M'
##### => '16L'
##### => '16½'
##### => '16>'
##### => '17'

现在我不知道排序是如何完成的,但除了它对数组中的近10000个项进行排序这一事实之外(因为它是一个在其他人的工作中使用的函数,因为它在他们的工作中是一个问题,而且我正在查看的代码似乎只用于控制循环迭代的方向)如果第二个数组的大小分别为16和17,并且第一个数组没有被清理,那么它将在16进行处理,跳过每个值,直到它达到17,这意味着,
isset
检查8次失败再次为真,这是我认为最小的示例,magento的问题是,每次产品的所有尺寸都被分组在一起,即使目录中的2/3会使用XS->XL类型的尺寸缩放,我想您可以选择另一个方向:

$newSizeArray = array();
foreach ($products as $i => $index)
    if (isset($sizeArray[$index]))
        $newSizeArray[$index] = $sizeArray[$index];
$sizeArray = $newSizeArray;

我想你可以去另一个方向:

$newSizeArray = array();
foreach ($products as $i => $index)
    if (isset($sizeArray[$index]))
        $newSizeArray[$index] = $sizeArray[$index];
$sizeArray = $newSizeArray;

我想你可以去另一个方向:

$newSizeArray = array();
foreach ($products as $i => $index)
    if (isset($sizeArray[$index]))
        $newSizeArray[$index] = $sizeArray[$index];
$sizeArray = $newSizeArray;

我想你可以去另一个方向:

$newSizeArray = array();
foreach ($products as $i => $index)
    if (isset($sizeArray[$index]))
        $newSizeArray[$index] = $sizeArray[$index];
$sizeArray = $newSizeArray;

可以使用array_intersect_key()函数,该函数在一次调用中提供两个for()循环的结果

它可能会更快,因为它是用C或C++编写的,与你运行PHP()循环相反。


我不认为你们有太多的选择,尽管伊利亚·布尔索夫的回答也很好。该循环只经过10次。

您可以使用array\u intersect\u key()函数,该函数在一次调用中提供两个for()循环的结果

它可能会更快,因为它是用C或C++编写的,与你运行PHP()循环相反。


我不认为你们有太多的选择,尽管伊利亚·布尔索夫的回答也很好。该循环只经过10次。

您可以使用array\u intersect\u key()函数,该函数在一次调用中提供两个for()循环的结果

它可能会更快,因为它是用C或C++编写的,与你运行PHP()循环相反。


我不认为你们有太多的选择,尽管伊利亚·布尔索夫的回答也很好。该循环只经过10次。

您可以使用array\u intersect\u key()函数,该函数在一次调用中提供两个for()循环的结果

它可能会更快,因为它是用C或C++编写的,与你运行PHP()循环相反。


我不认为你们有太多的选择,尽管伊利亚·布尔索夫的回答也很好。该循环只经过10次。

从第一个数组中删除不需要的元素非常容易:

$sizeArray = array_intersect_key($sizeArray, $products);
传递给函数的数组顺序很重要。请参见php.net上的
array\u intersect\u key
条目


不过,我将在回答中添加一个问题:我不确定在您的案例中这样做是否真的会对您的开销有很大帮助,除非您重复使用第一个数组,在这种情况下,您可能需要保留所有数据。也许您需要更多的解释?

从第一个数组中删除不需要的元素非常简单:

$sizeArray = array_intersect_key($sizeArray, $products);
传递给函数的数组顺序很重要。请参见php.net上的
array\u intersect\u key
条目


不过,我将在回答中添加一个问题:我不确定在您的案例中这样做是否真的会对您的开销有很大帮助,除非您重复使用第一个数组,在这种情况下,您可能需要保留所有数据。也许您需要更多的解释?

从第一个数组中删除不需要的元素非常简单:

$sizeArray = array_intersect_key($sizeArray, $products);
传递给函数的数组顺序很重要。请参见php.net上的
array\u intersect\u key
条目


不过,我将在回答中添加一个问题:我不确定在您的案例中这样做是否真的会对您的开销有很大帮助,除非您重复使用第一个数组,在这种情况下,您可能需要保留所有数据。也许您需要更多的解释?

从第一个数组中删除不需要的元素非常简单:

$sizeArray = array_intersect_key($sizeArray, $products);
arr的顺序