查询数组类似于SQL查询- PHP


Query array similarly to SQL query - PHP

我正试图编写一个快速脚本,只查询一次MSSQL表,然后在我的端组织响应,这样我就不必一直查询mysql的数据。

很难解释,但我想到的是在一个查询中抓取我需要的一切,然后将每一行组织成一个数组,然后将该数组放入另一个包含所有内容的数组,然后我可以从中提取数据。

我已经得到了什么:

$allInclusiveArray = [];
$sumRecords = mssql_num_rows($result);
for ($i = 0; $i < $sumRecords; ++$i) {
    //get key values for array
    echo $value1= mssql_result($result, $i, 'key1');
    echo $value2= mssql_result($result, $i, 'key2');
    echo $value3= mssql_result($result, $i, 'key3');
    echo $value4= mssql_result($result, $i, 'key4');
    $tempArray = [
        "key1" => $value1,
        "key2" => $value2,
        "key3" => $value3,
        "key4" => $value4
    ];
    array_push($allInclusiveArray, $tempArray);
}

的最终结果将是一个数组,看起来像:

$allInclusiveArray = [
     [array with keys and values],
     [array with keys and values],
     [array with keys and values]
];

我想知道的是,如果有一种方法来查询这个数组来抓取与一个键相关的所有值,其中另一个键有一个固定的值。在mssql中,它看起来像SELECT key1 FROM table WHERE key2 = value2

一种可能是执行for循环,然后运行and if语句检查键和值是否匹配,例如:

for (i in length of array) {
    if (the array located at i has key2 equaling value2) {
        select the value of key1 from the array at this index
    }
}

编辑:我最终在MSSQL这边做了大部分的排序。我这边有一个工作的PHP脚本来对批量数据进行排序,但是即使处理20,000条记录也要花很长时间。

像这样?

下面是一个例子:https://3v4l.org/MrqvI

function arrayQuery($array, $key, $match){
    foreach($array as $row){
        if(array_key_exists($key, $row) && $row[$key] == $match) return $row;
    }
    return $false;
}

如果需要更多的功能,可以很容易地扩展成一个完整的类

这是我昨天写的一篇关于这个话题的博文。

底线是Doctrine具有具有类似SQL语义的可查询ArrayCollections (Criteria类似于ORM查询构建器)。

参考资料在这里。如果你使用composer,你可以要求项目中的库直接使用它。

它通常与ORM或ODM结合使用,以过滤(部分加载)大型关系(这就是本文所介绍的内容)。