0

を使用して配列を作成しました

    $processed[$y] = array('source' => $source,
            'check total' => number_format($checkTotal, 2, '.', ''),//($rows['total'], 2, '.', ''),
            'check number' => $num,
            'table' => $invTable,
            'skus' => $skuArray,
            'check amount' => number_format($amount, 2, '.', '')
            );
$y++;

$skuArray は、特定の小切手番号に関連付けられているすべての SKU を含む配列です。次のように表示しようとしています:

    source  check total check number  table        skus     check amount
    MNC       152.32       649       inv_temp    10198547   152.32
                                                 10195874

そのため、次のアイテムをリストする前に、特定のチェック番号に関連付けられているすべての SKU がリストされます。
$processed を csv ファイルに変換する関数は次のとおりです。

    function to_csv( $array ) {
 $csv = "";

 if (count($array) == 0) return "No Processed checks found";

 ## Grab the first element to build the header
 $arr = array_pop( $array );
 $temp = array();
 foreach( $arr as $key => $data ) {
   $temp[] = $key;
 }
 $csv = implode( ',', $temp ) . "\r\n";

 ## Add the data from the first element
 $csv .= to_csv_line( $arr );

 ## Add the data for the rest
 foreach( $array as $arr ) {
   $csv .= to_csv_line( $arr );
 }

 return $csv;
    }

    function to_csv_line( $array ) {
 $temp = array();
 foreach( $array as $elt ) {
   $temp[] = '"' . addslashes( $elt ) . '"';
 }

 $string = implode( ',', $temp ) . "\r\n";

 return $string;
    }

どうすればこれを達成できますか? array('skus=>$skuArray) を使用してみましたが、結果に「Array」が表示されました。

更新: var_dump($skuArray) array(1075) { [0]=> string(8) "10182997" [1]=> string(8) "10190313" [2] を実行すると、配列は次のようになります。 => 文字列(8) "10190314" [3]=> 文字列(8) "10190315" など

4

2 に答える 2

1

私はテストされていない解決策を提供したので、あなた自身の裁量で使用してください。

コード内のコメントを通じてすべてを説明するために最善を尽くしました。

  1. sku 配列から最初の sku 値を削除し、最初の行に割り当てます。

  2. 回線キーに基づいて、追加の sku を一時配列に追加します。

  3. 一時的な sku 配列を確認し、そこから追加の行を作成します。

最終的なto_csv関数は次のようになります。

function to_csv( $array ) {
    $csv = "";

    if (count($array) == 0) return "No Processed checks found";

    ## Grab the first element to build the header
    $arr = $array[0];
    $temp = array();
    foreach( $arr as $key => $data ) {
        $temp[] = $key;
    }
    $csv = implode( ',', $temp ) . "\r\n";

    ## Process each line
    foreach( $array as $arr ) {

        ## Check for multiple sku values.  Create a temporary array for them to add them after this line.
        if(isset($arr['skus']) && is_array($arr['skus']))
        {
            //Remove the first value (since we only need it for the actual line item)
            $sku_value = $arr['skus'][0];
            unset($arr['skus'][0]);

            //Create temporary lines for each sku
            $temp_sku_arrays = array();
            foreach($arr['skus'] as $sku)
            {
                $sku_array = array();
                foreach($arr as $key => $value)
                {
                    //Set only the sku key with a value.
                    $sku_array[$key] = ($key == 'skus' ? $sku : '');
                }
                $temp_sku_arrays[] = $sku_array;
            }

            //Set the first line to the first sku value.
            $arr['skus'] = $sku_value;          
        }  

        $csv .= to_csv_line( $arr );

        //Check for additional sku lines, then add them
        if(isset($temp_sku_arrays) && is_array($temp_sku_arrays))
        {
            foreach($temp_sku_arrays as $sku_array)
            {   
                $csv .= to_csv_line( $sku_array );
            }
            unset($temp_sku_arrays);
        }
    }

    return $csv;
}
于 2013-04-15T15:45:44.497 に答える
0

CSVはあなたがやろうとしていることにはあまり適していないと思います。json または xml を使用します。ただし、次のように、csv セパレーターとは異なるセパレーターを選択して配列を表すことができます。

foo,bar1;bar2;bar3,...

次のレコードを表すもの:

$record = array (
   'foo',
   array ('bar1', 'bar2', 'bar3')
);
于 2013-04-15T15:20:22.410 に答える