Php 如何以最少的时间浪费从Laravel框架中的数据库中获取一个普通数组中的所有单词?
我想将数据库中的所有单词放入默认数组中。我的数据库里有五万多个单词,很可能这个数字高达一百万。所以,我希望这次手术没有花太多时间。我试过这样的方法,在通常的数组中一个字也不放。也就是说,单词将传递到关联数组:Php 如何以最少的时间浪费从Laravel框架中的数据库中获取一个普通数组中的所有单词?,php,laravel,laravel-5.5,Php,Laravel,Laravel 5.5,我想将数据库中的所有单词放入默认数组中。我的数据库里有五万多个单词,很可能这个数字高达一百万。所以,我希望这次手术没有花太多时间。我试过这样的方法,在通常的数组中一个字也不放。也就是说,单词将传递到关联数组: $words = DB::table('words')->pluck('word'); dump($words); 结果: Collection {#197 ▼ #items: array:12 [▼ 0 => "тоҷик" 1 => "ӯзбек
$words = DB::table('words')->pluck('word');
dump($words);
结果:
Collection {#197 ▼
#items: array:12 [▼
0 => "тоҷик"
1 => "ӯзбек"
2 => "қирғиз"
3 => "эрон"
4 => "япон"
5 => "англис"
6 => "тоҷик"
7 => "ӯзбек"
8 => "қирғиз"
9 => "эрон"
10 => "япон"
11 => "англис"
]
}
array:12 [▼
0 => {#210 ▼
+"word": "тоҷик"
}
1 => {#207 ▼
+"word": "ӯзбек"
}
2 => {#209 ▼
+"word": "қирғиз"
}
3 => {#206 ▼
+"word": "эрон"
}
4 => {#208 ▼
+"word": "япон"
}
5 => {#205 ▼
+"word": "англис"
}
6 => {#204 ▼
+"word": "тоҷик"
}
7 => {#203 ▼
+"word": "ӯзбек"
}
8 => {#202 ▼
+"word": "қирғиз"
}
9 => {#200 ▼
+"word": "эрон"
}
10 => {#213 ▼
+"word": "япон"
}
11 => {#214 ▼
+"word": "англис"
}
]
第二种方法:
$words = DB::select("SELECT `word` FROM `words`");
dump($words);
结果:
Collection {#197 ▼
#items: array:12 [▼
0 => "тоҷик"
1 => "ӯзбек"
2 => "қирғиз"
3 => "эрон"
4 => "япон"
5 => "англис"
6 => "тоҷик"
7 => "ӯзбек"
8 => "қирғиз"
9 => "эрон"
10 => "япон"
11 => "англис"
]
}
array:12 [▼
0 => {#210 ▼
+"word": "тоҷик"
}
1 => {#207 ▼
+"word": "ӯзбек"
}
2 => {#209 ▼
+"word": "қирғиз"
}
3 => {#206 ▼
+"word": "эрон"
}
4 => {#208 ▼
+"word": "япон"
}
5 => {#205 ▼
+"word": "англис"
}
6 => {#204 ▼
+"word": "тоҷик"
}
7 => {#203 ▼
+"word": "ӯзбек"
}
8 => {#202 ▼
+"word": "қирғиз"
}
9 => {#200 ▼
+"word": "эрон"
}
10 => {#213 ▼
+"word": "япон"
}
11 => {#214 ▼
+"word": "англис"
}
]
我想把这个表格中的所有单词都放在通常的数组中:
array:12 [▼
0 => "тоҷик"
1 => "ӯзбек"
2 => "қирғиз"
3 => "эрон"
4 => "япон"
5 => "англис"
6 => "тоҷик"
7 => "ӯзбек"
8 => "қирғиз"
9 => "эрон"
10 => "япон"
11 => "англис"
]
我需要这个来获得两个数组之间的差异。输入数组是一个乐观的数组,所以我需要从低音中提取所有的单词来添加到丰富的数组中。一般来说,在Laravel框架本身中是否有类似于array_diff()
的函数
$diff = array_diff($input_array, $words_from_db);
并将差异添加到数据库中:
foreach ($diff as $value) {
DB::table('words')->insert(['word'=>$value]);
}
我向数据库添加大量单词(数据)的方法是否正确?如果可能的话,我需要优化吗
总的来说,我从Laravel找到了这个函数:
public function diff($items)
{
return new static(array_diff($this->items, $this->getArrayableItems($items)));
}
但是我如何将它用于get diff 2阵列呢?输入数组将是默认数组和db中的第二个数组字
提前感谢大家的回答,并请原谅我对问题中的语法错误表示歉意。您可以完全在MySQL内部完成向数据库中插入唯一单词的操作,这应该比将所有单词拉入内存、分散它们并发送唯一值要快 要做到这一点,您需要在words列上添加一个唯一的索引。(参考号:) 然后在插入时,您需要在重复键上添加
(Laravel query builder不支持重复键-可以使用raw插入)ref:
我会在重复键上使用,而不是插入忽略。我认为insert ignore可能会隐藏与复制密钥无关的其他潜在问题。您可以在Laravel 5.5中获得diff two数组,因此:
$words = DB::table('words')->pluck('word')->toArray(); // Collection converted to simple array
您可以使用php中的默认函数获取差异数组:
$result = array_diff($input_default_array, $words);
什么是laravel版本?laravel 5.5@OmisakinOluwatobi@John您唯一要做的是在表中插入不重复的新词吗?是的,但是我的输入词将在默认数组@aknosif中。如果可能的话,我不会麻烦将现有词加载到PHP内部的diff中。如果单词的数量和你说的一样大,那么你将花费大量时间查询/区分数据。您可以完全在MySQLOk中完成同样的事情,您的代码运行良好。以及如何使用这个查询在重复的关键字=值(word)上插入单词值('foo','bar')代码>在最短的丢失时间内将我的单词从数组添加到数据库?例如,我如何在查询中使用函数DB::insert()添加单词?您能告诉我如何在Laravel 5.5中使用查询吗@Aknosis@John不幸的是,我相信您必须手动构建查询,并在重复的关键字=值(word);]上使用DB::insert([insert-INTO-word-VALUES(?),(?),$input\u-words)
。