1

私はこの配列を持っています:

array(122) { 
    ["1AB168820010"]=> array(3) { 
       ["MACHINE_NAME"]=> "L1XP2A"
       ["FEEDER_SLOT"]=> "114"
       ["REJECT_RATE"]=> float(0.0394) 
       ["DEFECT_QTY"]=> int(2) 
       ["SOLDER BALL"]=> int(2) 
    }  
    ["1AB037870031"]=> array(5) { 
       ["MACHINE_NAME"]=> "L2CP7A"
       ["FEEDER_SLOT"]=> "155"
       ["REJECT_RATE"]=> float(2.3022) 
       ["DEFECT_QTY"]=> int(39) 
       ["COMPONENT TOMBSTONED"]=> int(31) 
       ["SOLDER BALL"]=> int(2) 
       ["COMPONENT BILLBOARD"]=> int(6)
    } 
    ["1AB144890021"]=> array(7) { 
       ["MACHINE_NAME"]=> "L21P3A"
       ["FEEDER_SLOT"]=> "214"
       ["REJECT_RATE"]=> float(0.0225) 
       ["DEFECT_QTY"]=> int(8) 
       ["SOLDER INSUFFICIENT "]=> int(2) 
       ["SOLDER BAD"]=> int(2) 
       ["SOLDER BALL"]=> int(2) 
       ["COMPONENT MISSING"]=> int(1) 
       ["COMPONENT BILLBOARD"]=> int(1) 
    } 
    ["1AB144890033"]=> array(7) {
       ["MACHINE_NAME"]=> "L1CP7A"
       ["FEEDER_SLOT"]=> "234" 
       ["REJECT_RATE"]=> float(0.0142) 
       ["DEFECT_QTY"]=> int(7) 
       ["SOLDER INSUFFICIENT "]=> int(1) 
       ["SOLDER BAD"]=> int(1) 
       ["COMPONENT MISSING"]=> int(3) 
       ["COMPONENT SKEW"]=> int(1) 
       ["COMPONENT TOMBSTONED"]=> int(1) 
    }
    #...more
}

配列をループして、配列の出力から次のような文字列を作成する必要がありますが、最善の方法がわかりません...助けてください

 1AB168820010 ( 0.0394% ) #<-this is the 'REJECT_RATE'
  -Machine: L1XP2A
  -Feeder: 114
     SOLDER BALL ( 100% ) #<-'SOLDER BALL' value (2) divided by 'DEFECT_QTY' (2) * 100
 ------------------------
 1AB037870031 ( 2.3022% ) 
  -Machine: L2CP7A
  -Feeder: 155
     COMPONENT TOMBSTONED ( 79.48% ) #<- ( 31 / 39 ) * 100
     COMPONENT BILLBOARD ( 15.38% )  #<- ( 6 / 39 ) * 100
     SOLDER BALL ( 5.12% ) #<- ( 2 / 39 ) * 100
 ------------------------
 1AB144890021 ( 0.0225% )
  -Machine: L2IP3A
  -Feeder: 214
     SOLDER INSUFFICIENT ( 25% )
     SOLDER BAD ( 25% )
     SOLDER BALL ( 25% )
     COMPONENT MISSING ( 12.5% )
     COMPONENT BILLBOARD ( 12.5% )
 ------------------------
 1AB144890033 ( 0.0142% )
  -Machine: L1CP7A
  -Feeder: 234
     SOLDER INSUFFICIENT ( 14.3% )
     SOLDER BAD ( 14.3% )
     COMPONENT MISSING ( 42.8% )
     COMPONENT SKEWED ( 14.3% )
     COMPONENT TOMBSTONED ( 14.3% )

私の主な問題は、部品番号ごとの欠陥の数(つまり、コンポーネントの欠落、コンポーネントのねじれ、はんだ不良)がわからないことです。したがって、欠陥の数(および欠陥の種類)が変化します。 'COMPONENT MISSING:[somecalc]'をforeachループにハードコーディングすることはできません。

4

5 に答える 5

2

シンプルなアプローチと「正しい」アプローチの2つがあります:)

簡単なアプローチ:

foreach ($array as $machine_key=>$machine){
    $solder_ball = $machine['SOLDER_BALL']/ $machine['DEFECT_QTY']*100;
    echo "$machine_key ({$machine['REJECT_RATE']})";
    echo " -Machine {$machine['MACHINE_NAME']};
    echo " -Feeder {$machine['FEEDER_SLOT']}";
    echo "  SOLDER INSUFFICIENT ( $solder_ball%)";
    //...and so on...//
}

「正しい」アプローチ

クラスがあるMachine

class Machine{
    $protected $name, $feeder, $solder_insufficient; //..all youneed to output here..//
    function__constructor(Array $params){
        $this->name = $params['MACHINE_NAME'];
        $this->solder_insufficient = $machine['SOLDER_BALL']/ $machine['DEFECT_QTY']*100;
        //..all other params here...//
    }

    function output(){
        echo "{$this->key} ({$this->reject_rate)";
        echo " -Machine {$this->key}";
        echo " -Feeder {$this->feeder}";
        echo "  SOLDER INSUFFICIENT ( {$this->solder_insufficient}%)";
        //....and so on ..//
    }
}

「正しい」アプローチを使用する利点は、クラスを複数回再利用でき、1つの場所でのみコードを変更することで、クラスを必要とするすべての場所で出力を調整できることです。

于 2011-08-12T21:02:52.957 に答える
1

(オプションで、キーで配列を並べ替えることができます:ksort($array);。)

次に、各要素を繰り返し処理して、文字列を作成します。

$output = '';
foreach ($array as $key => $data) {
  $output .= $key . ' ( ' . number_format($data['REJECT_RATE'], 3) . '% )' . "\n";
  $output .= ' -Machine: ' . $data['MACHINE_NAME'] . "\n";
  $output .= ' -Feeder: ' . $data['FEEDER_SLOT'] . "\n";
  $output .= '  SOLDER BALL ( ' . number_format(2 / $data['DEFECT_QTY'] * 100, 0) . '% )'. "\n";

  // Add more calculation here…

  $output .= "------------------------\n";
}

そして最後に、次の文字列を出力しますecho $output;

于 2011-08-12T20:53:09.843 に答える
1

これはうまくいくかもしれません

foreach($arr as $id => $item) {
  printf('%s ( %s )
  -Machine: %s
  -Feeder: %s
',
  $id,
  $item['REJECT_RATE'],
  $item['MACHINE_NAME'],
  $item['FEEDER_NAME']);
  foreach($item as $key => $val) {
    if(!in_array($key, array('REJECT_RATE', 'MACHINE_NAME', 'FEEDER_NAME', 'REJECT_QTY'))) {
      printf("    %s ( %s )\n", $key, 100*$val/$item['REJECT_QTY']);
    }
  }
}
于 2011-08-12T20:57:02.667 に答える
0

foreach値を反復処理し、必要に応じて出力文字列をフォーマットするために使用します。

foreach( $your_array as $id => $details ) {
    foreach( $details as $key => $value ) {
        //format your desired output
    }
}
于 2011-08-12T20:54:18.073 に答える
0

foreach配列内の各オブジェクトをループし、それに応じて出力するループを利用します。以下の例は、スタイルに合わせて変更する必要がありますが、開始するための基礎を提供する必要があります。

<table>
<thead>
    <tr><th>Item</th><th>Value</th></tr>
</thead>
<tbody>
<?php
foreach ($myArray as $k => $v){
    echo "<tr><td>$k</td><td>$v</td></tr>";
}
?>
</tbody>
</table>
于 2011-08-12T20:51:52.527 に答える