创建多维数组收集器 - PHP

时间:2016-12-06 23:15:36

标签: php arrays

我试图创建一个“数组收集器”来从一个巨大的数组中检索数据,而不需要执行foreach循环,以及那些时间之类的东西。我不知道从哪里开始,所以我想知道是否有人知道是否有一个包已经有我的目的或我需要定制的东西。有人可以帮我解决这个问题吗?

我有一个数组(参见示例1),如果我插入一个特定的数组(参见示例2),我想检索我选择的项目。有关输出,请参阅示例3.有人可以让我开始或创建类似的东西吗?如果有人创造了这个,那么生成一个github包,并为作者提供所有信用,因为我认为这可以帮助很多人!

我熟悉Laravel Collections,但他们不提供我想要的方法。

示例1

 R_Index    Chr Start   End Ref Alt Func.IDP.refGene    Gene.IDP.refGene    GeneDetail.IDP.refGene
4629    chr10   78944590    78944590    G   A   intergenic  NONE;KCNMA1 dist=NONE;dist=451371
4630    chr10   79396463    79396463    C   T   intronic    KCNMA1  .
4631    chr10   79397777    79397777    C   -   exonic  KCNMA1;X1X  .
4633    chr10   89397777    89397777    -   GAA exonic  NONE;X1X;KCNMA1 .

示例2

awk -F'\t' 'NR==FNR{a[$0];next} FNR==1{print} {x=$8; sub(/;.*/,"",x)} x in a{$1=++c; print}' gene file > out

示例3

$array = [
        'title'       => 'Product Title',
        'description' => 'Lorem ipsum item text ',
        'variants'    => [
            0 => [
                'title'       => 'Variant title 1',
                'description' => 'Lorem variant description',
                'price'       => [
                    'price'     => 10,
                    'price_old' => 14
                ]
            ],
            1 => [
                'title'       => 'Variant title 2',
                'description' => 'Lorem variant description',
                'price'       => [
                    'price'     => 10,
                    'price_old' => 14
                ],
                'colors'      => [
                    0 => 'Red',
                    1 => 'Blue'
                ]
            ]
        ],
    ];

2 个答案:

答案 0 :(得分:0)

您最好的解决方案是实现RecursiveArrayIterator类 http://php.net/manual/en/class.recursivearrayiterator.php

答案 1 :(得分:0)

这样的事情应该可以胜任。彼此嵌套有2个循环。第一个循环只迭代count($ get)次,第二个循环只迭代元素的深度。在你给出的例子中,总共只有8个循环。你可以添加一些错误处理,如果!empty()等我通过引用(&)设置数组,以防止数据在内存中重复,以防你获得大数据集。

function getValues(&$array, $get) {
    $outputs = [];
    foreach ($get as $query) {
        $query = explode('.', $get);
        $container &= $array;
        foreach ($query as $elem) {
            $container &= $comtainer[$elem];
        }
    }
}