2011-08-12 36 views
1

我有这样的数组:破灭PHP数组格式的文本

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歪斜,焊接BAD)每部分号码,有多少缺陷(以及它有哪些缺陷)会有所不同,因此我不能只是将'COMPONENT MISSING:[一些calc')硬编码到我的foreach循环...

回答

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;

+0

为什么要排序数组? OP从未要求过。 –

+0

猜猜我的大脑做了一些自动排序...我再次检查,确实,所需的输出没有排序。修正了我的答案。 – Shi

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> 
+0

是的我想我可以做这样的事情,我不知道是否有一个array_map类型的函数结合一些进一步的格式,可以让我避免在我的脚本中使用另一个循环 – sadmicrowave

0

使用foreach来遍历值并根据需要设置输出字符串的格式。

foreach($your_array as $id => $details) { 
    foreach($details as $key => $value) { 
     //format your desired output 
    } 
} 
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']); 
    } 
    } 
} 
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 ..// 
    } 
} 

好处ofusing“正确”的做法是遵守前面重用班级多次,并在所有placesthat通过只在一个地方修改代码需要调整它的输出。