Php 继续从多个阵列插入数据,即使其中一个阵列为空

Php 继续从多个阵列插入数据,即使其中一个阵列为空,php,mysql,laravel,Php,Mysql,Laravel,我正在用php、mysql和laravel创建一种多语言词典,将来自不同语言的单词放在同一行。我使用for循环插入不同长度数组中的数据。我的问题是,一旦其中一个数组为空,循环就会停止。只要所有数组都不是空的,我想继续插入数据,即使这意味着数据库中的某些列将为空 $words = request()->json()->all(); $base_words = array_column($words, 'baseForm'); $fr = array_column($words, 'fr

我正在用php、mysql和laravel创建一种多语言词典,将来自不同语言的单词放在同一行。我使用for循环插入不同长度数组中的数据。我的问题是,一旦其中一个数组为空,循环就会停止。只要所有数组都不是空的,我想继续插入数据,即使这意味着数据库中的某些列将为空

$words = request()->json()->all();
$base_words = array_column($words, 'baseForm');
$fr = array_column($words, 'fr');
$en = array_column($words, 'en');
$es = array_column($words, 'es');
$it = array_column($words, 'it');
$de = array_column($words, 'de');

for ($i = 0; $i < max($fr, $en, $es, $it, $de); $i++) {
  Word::insert([
    'ru' => $base_words[$i],
    'fr' => $fr[$i],
    'en' => $en[$i],
    'es' => $es[$i],
    'it' => $it[$i],
    'de' => $de[$i]
  ]);
}
提前感谢任何愿意在这方面帮助我的人

编辑:下面是它可能感兴趣的人的完整工作代码:

    $words = request()->json()->all();
    $base_words = array_column($words, 'baseForm');
    $declined_words = array_column($words, 'declinedForm');
    $fr = array_column($words, 'fr');
    $en = array_column($words, 'en');
    $es = array_column($words, 'es');
    $it = array_column($words, 'it');
    $de = array_column($words, 'de');

    for ($i = 0; $i < count(max($fr, $en, $es, $it, $de)); $i++) {
      Word::insert([
        'ru' => isset($base_words[$i]) ? $base_words[$i] : null,
        'fr' => isset($fr[$i]) ? $fr[$i] : null,
        'en' => isset($en[$i]) ? $en[$i] : null,
        'es' => isset($es[$i]) ? $es[$i] : null,
        'it' => isset($it[$i]) ? $it[$i] : null,
        'de' => isset($de[$i]) ? $de[$i] : null
      ]);
      }

我假设插入中断是因为所有数组中的元素数都不相同

因此,如果您在array1中有4个元素,但在array2中有7个元素,当您尝试访问array1[5]时,它将中断

您可以尝试以下方法:

$words = request()->json()->all();
$base_words = array_column($words, 'baseForm');
$fr = array_column($words, 'fr');
$en = array_column($words, 'en');
$es = array_column($words, 'es');
$it = array_column($words, 'it');
$de = array_column($words, 'de');

for ($i = 0; $i < max($fr, $en, $es, $it, $de); $i++) {
  Word::insert([
    'ru' => isset($base_words[$i]) ? $base_words[$i] : null,
    'fr' => isset($fr[$i]) ? $fr[$i] : null,
    'en' => isset($en[$i]) ? $en[$i] : null,
    'es' => isset($es[$i]) ? $es[$i] : null,
    'it' => isset($it[$i]) ? $it[$i] : null,
    'de' => isset($de[$i]) ? $de[$i] : null
  ]);
} 
$words = request()->json()->all();
$base_words = array_column($words, 'baseForm');
$fr = array_column($words, 'fr');
$en = array_column($words, 'en');
$es = array_column($words, 'es');
$it = array_column($words, 'it');
$de = array_column($words, 'de');

for ($i = 0; $i < max($fr, $en, $es, $it, $de); $i++) {

if (isset($base_words[$i])) {
  Word::insert([
   'ru' => $base_words[$i],
  ]);
}

if (isset($fr[$i]) {
  Word::insert([
   'fr' => $fr[$i],
  ]);
}
$words=request()->json()->all();
$base_words=数组_列($words,'baseForm');
$fr=数组_列($words,'fr');
$en=数组_列($words,'en');
$es=数组_列($words,'es');
$it=array_列($words,'it');
$de=数组_列($words,'de');
对于($i=0;$iisset($base\u words[$i])?$base\u words[$i]:null,
'fr'=>isset($fr[$i])?$fr[$i]:空,
'en'=>isset($en[$i])?$en[$i]:空,
'es'=>isset($es[$i])?$es[$i]:空,
'it'=>isset($it[$i])?$it[$i]:null,
'de'=>isset($de[$i])?$de[$i]:空
]);
} 

或者提供完整的错误。

根据您的评论,您可以执行以下操作:

$words = request()->json()->all();
$base_words = array_column($words, 'baseForm');
$fr = array_column($words, 'fr');
$en = array_column($words, 'en');
$es = array_column($words, 'es');
$it = array_column($words, 'it');
$de = array_column($words, 'de');

for ($i = 0; $i < max($fr, $en, $es, $it, $de); $i++) {
  Word::insert([
    'ru' => isset($base_words[$i]) ? $base_words[$i] : null,
    'fr' => isset($fr[$i]) ? $fr[$i] : null,
    'en' => isset($en[$i]) ? $en[$i] : null,
    'es' => isset($es[$i]) ? $es[$i] : null,
    'it' => isset($it[$i]) ? $it[$i] : null,
    'de' => isset($de[$i]) ? $de[$i] : null
  ]);
} 
$words = request()->json()->all();
$base_words = array_column($words, 'baseForm');
$fr = array_column($words, 'fr');
$en = array_column($words, 'en');
$es = array_column($words, 'es');
$it = array_column($words, 'it');
$de = array_column($words, 'de');

for ($i = 0; $i < max($fr, $en, $es, $it, $de); $i++) {

if (isset($base_words[$i])) {
  Word::insert([
   'ru' => $base_words[$i],
  ]);
}

if (isset($fr[$i]) {
  Word::insert([
   'fr' => $fr[$i],
  ]);
}
$words=request()->json()->all();
$base_words=数组_列($words,'baseForm');
$fr=数组_列($words,'fr');
$en=数组_列($words,'en');
$es=数组_列($words,'es');
$it=array_列($words,'it');
$de=数组_列($words,'de');
对于($i=0;$i$base_单词[$i],
]);
}
如果(isset($fr[$i]){
插入([
“fr”=>$fr[$i],
]);
}
}


对于每种语言继续这样做。这应该可以解决您的问题。

您能提供
$words
变量的内容吗?当然,我编辑了我的原始帖子。添加您收到的错误。您所做的没有任何意义。您试图在没有基本单词的情况下存储翻译(每当
$base\u words[$I]时都会发生这种情况)
未设置)。您的JSON结构非常不理想-您应该尝试按基本形式对所有翻译进行分组。您的数据库结构似乎也不理想-如果您的系统中可以对单个单词进行多个翻译,您应该为翻译的语言设置一列,而不是为每种语言和i设置一列n在其中插入一大堆空值。我不确定你是否得到了我想要的结果以及我的数据库是什么样子,但无论如何,我感谢你的帮助。我为每种语言都有一个专栏,ru | fr | en | es |它的基本单词始终是俄语单词,因为我想在ev中添加俄语单词的定义以及该单词的所有同义词ery语言。就像这样,我会有一本从俄语到所有其他语言的字典:ru-fr-ru-en-ru-it等等。你仍然认为一切都不太理想吗?你的代码按照我的要求添加所有数据,但随后不断添加数千行的值为NULL的数据。你不是说:只要所有数组都不是空的,我想继续插入数据,即使这意味着数据库中的某些列将为NULL??假设具有法语翻译($fr)的数组是具有15个元素的最长数组。如果这意味着数据库中的意大利语列将为NULL,则我想添加这15个元素事件,因为意大利语($it)数组只有3个元素。但是我想在15行之后停止添加数据。谢谢你,对于那些有帮助的元素,我通过将max()函数包装为count():count(max($fr,$en,$es,$it,$de))解决了在数据库中添加无休止的数据的问题这个解决方案的问题是,它在一行中插入基本单词,然后在下一行中插入fr单词。我希望所有语言都在同一行中。无论如何,谢谢你试图帮助我。拜托,伙计,你只需要在循环之前插入类似:$aaa=单词的内容,然后插入你需要插入的任何内容。如果我的任何回答都有帮助的话d、 你可以投票给他们。。。