【发布时间】:2016-03-22 13:30:36
【问题描述】:
在我的 SQL 数据库中有一个包含数组的列。每个数组由许多数组组成
[“单词”,NUMBER]
如示例 $rowOne、$rowTwo、$rowThree。数组的长度和字数可以不同。我用 NLTK 分析了许多文本。现在我想组合一个类别的所有文本,以获得例如一个类别中最常见的单词。
$rowOne = [('love', 14), ('let', 12), ('rain', 12), ('yea', 7), ('oh', 7), ('make ', 5), ('快乐', 3), ('梦想', 3)];
$rowTwo =[('la', 12), ('high', 10), ('fun', 6), ('sun', 6), ('two', 5), ('fly ', 5), ('one', 5), ('bridge', 4)];
$rowThree = [('deal', 33), ('ya', 19), ('gotta', 7), ('know', 6), ('another', 5), ('take ', 5), ('thrill', 4), ('get', 4)];
目的是获取我的 WebApp 的用户想要的所有 $rows,通常可能是数千行,并将所有数组组合成一个按 Number 排序的 $result 数组,
我现在的方法是构建一个 $combinedArray 和这么长的行来组合现有的函数 combineTwoArrays 将一个 rowArray 集成到 $combinedArray 中。 但是我对这个解决方案和性能非常不满意,因为数组越来越大......
function combineTwoArray ($combinedArray, $arrayToCombine)
{
$result = $combinedArray;
foreach ($combinedArray as $element) {
foreach ($arrayToCombine as $combineElement) {
if($element[0] == $combineElement[0]{
$number = $element[1] + $combineElement[1];
$word = $element[0];
$array = [$word,$number]
array_push($result, $array);
}
}
return $result;
}
希望有更好更快的解决方案……!! :/
每一行都有一个唯一的歌曲 ID,一个更好的方法可能是创建一个新表。
- 我可以用 id 识别行
- 但是我应该如何拆分我的数组... ?!?!对于每个数组位置('love',14)一个新列还是数字也分开?
我尝试构建一个 SQLFiddle,但我认为它不起作用。 SQLFiddle
【问题讨论】:
-
对该引用使用合并转到php.net
-
更好的解决方案恕我直言,不应该使用列来存储数组,而是创建一个专用表和两者之间的
hasMany关系 -
我更新了我的问题并尝试构建一个 SQLFiddle,但我不知道它是否有效,因为我之前从未使用过它...SQLFiddle Link
标签: php mysql arrays nltk cakephp-3.0