Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将1个用户分配给1个订单id?_Php - Fatal编程技术网

Php 如何将1个用户分配给1个订单id?

Php 如何将1个用户分配给1个订单id?,php,Php,我想把数据分成多个用户 <?php $users = array('13','15','16','16','17','20'); $handle = fopen($_FILES['csvfile']['tmp_name'], 'r'); $i = 1; while ($data = fgetcsv($handle)) { foreach ($users as $value) { echo $data

我想把数据分成多个用户

<?php
    
    $users = array('13','15','16','16','17','20');
    $handle = fopen($_FILES['csvfile']['tmp_name'], 'r');
    
    $i = 1;
    while ($data = fgetcsv($handle)) {
        foreach ($users as $value) {
            echo $data['OrderId'] .":". $value;
            $i++;
        }
    }
    ?>
但是我想要这个输出

Order ID     :   UserId
405-6219270-3721912  :  13  
403-5995684-2353914  :  15  
404-1894735-7034722  :  16  
406-7756082-9574748  :  17  
171-7214409-3467567  :  20  
405-7442385-9605918  :  15  
171-7214409-3467569  :  16  
171-7214409-3467570  :  17  
171-7214409-3467571  :  20
405-7442385-9605972  :  15  
405-7442385-9605973  :  16  
405-7442385-9605973  :  17  
405-7442385-9605974  :  20

为什么我的循环迭代四次而不是一次?

像您一样使用嵌套循环,这将为每个订单形成文件,输出每个用户

您可以改为使用1个循环(读取输入文件)和行号(
%
)的模数(
$i
)并按订单输出一个用户

$userCount = count($users);
$i = 0;
while ($data = fgetcsv($handle)) {
    echo $data[0] .":". $users[$i % $userCount] . PHP_EOL;
    $i++;
}
对于每个订单ID(数据),您迭代所有用户。相反,您可以使用如下内容:



迭代用户,对于每个用户,如果仍然存在csv数据,则使用该csv数据并打印订单ID和用户ID。

这将只运行
count($users)
次,因此不会使用所有csv文件:)@RiggsFolly确定,但看起来这是所需的输出。在OP发送的列表中,每个用户只有一个输出行,似乎应该忽略CSV数据的其余部分。也许我误解了“但是我想要这个输出”。我猜OP没有花太多时间在他的样本数据和预期结果上,在“但是我想要这个输出”中有多个用户号码如果你仔细观察,忽略OP只有一个
13
,并且
$users
数组中的2个
16
没有像用户数组中那样的两次功能:)@RiggsFolly你是对的,我从来没有注意到多个16,我应该看起来更好,我以为它只是一个列表,每个用户ID只出现一次。您的数据是什么样子的,是否可能会有比订单ID更多的用户?如果订单ID多于用户,那么预期的输出是什么?
$userCount = count($users);
$i = 0;
while ($data = fgetcsv($handle)) {
    echo $data[0] .":". $users[$i % $userCount] . PHP_EOL;
    $i++;
}