我有这样一个数组:
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% )
我不确定如何处理的主要问题是,我不知道缺陷的数量(即组件缺失,组件歪斜,焊料坏)每个零件号,有多少缺陷(以及它有什么缺陷)会有所不同,因此我不能只是硬编码'组件缺失:[一些calc]'到我的foreach循环....
有两种方法:simple和right:)
简单的方法:
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 ..//
}
}
使用"正确"方法的好处是,你可以多次重用你的类,并在所有需要它的地方调整输出,只需修改一个地方的代码。
(可选,您可以按键对数组进行排序: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;
.
可以的
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']);
}
}
}
利用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>
使用foreach
遍历值并按需要格式化输出字符串。
foreach( $your_array as $id => $details ) {
foreach( $details as $key => $value ) {
//format your desired output
}
}