2012-02-22 17 views
0

嗨我想看到我對鍵停止,我已經建立了這樣的PHP是當前的下一個關鍵部分?

編輯人越來越真糊塗所以我使用了一個真正的數組,而不是一個實例的陣列

array (
    'key' => '', 
    'po' => '', 
    'label' => '', 
    'report_key' => '', 
    'shipper' => '', 
    'status' => '', 
    'location' => '', 
    'inspector' => '', 
    'commodity' => '', 
    'brand' => '', 
    'case_count' => '', 
    'variety' => '', 
    'style' => '', 
    'grower_lot' => '', 
    'pack_date' => '', 

    // grouping 4 items 
    'berry_size1' => '', 
    'berry_size2' => '', 
    'berry_size3' => '', 
    'berry_size4' => '', 

    // grouping 3 items 
    'bunch_color1' => '', 
    'bunch_color2' => '', 
    'bunch_color3' => '', 

    // grouping 2 items  
    'color1' => '', 
    'color2' => '', 


    // grouping 3 items 
    'stem1' => '', 
    'stem2' => '', 
    'stem3' => '', 


    // grouping 2 items 
    'shatter1' => '', 
    'shatter2' => '', 


    // grouping 2 items 
    'splits1' => '', 
    'splits2' => '', 


    // grouping 2 items 
    'wet_sticky1' => '', 
    'wet_sticky2' => '', 

    'overall_quality' => '', 


    // grouping 2 items 
    'sugar_brix1' => '', 
    'sugar_brix2' => '', 

    'rating' => '', 
    'comments' => '', 
) 

我想出了一些愚蠢的方式,實際上無法解決問題,它的極端倒退,老實說,我很尷尬,我的嘗試。

  foreach($obj as $key=>$val) { 

      if(strpos( preg_replace('/[^a-z]/i', '', $key), 
         preg_replace('/[^a-z]/i', '', $all_keys[$key+$b+1]) 
         ) !== false) { echo "<p>$key</p>"; // items 1-3 will show 
      } elseif(strpos(preg_replace('/[^a-z]/i', '', $key), 
          preg_replace('/[^a-z]/i', '', $all_keys[$key+$b-1]) 
          ) !== false) { echo "<p>$key</p>"; // show last item 
      } else { 

        $in.='<aside class="left">'; 
        $in .= "<label for='$key'>". ucwords(strtolower(str_replace('_',' ',$key))) ."</label><br/>"; 
        $in .= ($key=='key') ? "<input type='text' value='". $objLastId ."' id='$key' class='disabled' disabled='disabled'>" : "<input type='text' value='' name='$key' id='$key'>"; 
        $in.='</aside>'; 

       $b++; 
       } 
      } 

反正我真正想要實現這樣的事情,可能有人引導我朝着正確的方向嗎?

<style> 
.row2 input {width: 50px !important;} 
.row3 input {width: 27px !important;} 
.row4 input {width: 15px !important;} 
</style> 

// stem was a 2 item group, so should have the row4 class 
// and should have the second item appended by a &nbsp; 
// all be inside the same grouping, like below ... 
<aside class="left row2"> 
<label for="color1">Color</label> 
<br/><input type="text" value="" name="color1" id="color1"> 
&nbsp;<input type="text" value="" name="color2" id="color2"> 
</aside> 


// stem was a 3 item group, so should have the row4 class 
// and should have items 2-3 appended by a &nbsp; all be inside 
// the same grouping, like below ... 
<aside class="left row3"> 
<label for="stem1">Stem</label> 
<br><input type="text" id="stem1" name="stem1" value=""> 
&nbsp;<input type="text" id="stem2" name="stem2" value=""> 
&nbsp;<input type="text" id="stem3" name="stem3" value=""> 
</aside> 


// berry_size was a 4 item group, so should have the row4 class 
// and should have items 2-4 appended by a &nbsp; all be inside 
// the same grouping, like below ... 
<aside class="left row4"> 
<label for="berry_size1">Berry Size</label> 
<br/><input type="text" id="berry_size1" name="berry_size1" value=""> 
&nbsp;<input type="text" id="berry_size2" name="berry_size2" value=""> 
&nbsp;<input type="text" id="berry_size3" name="berry_size3" value=""> 
&nbsp;<input type="text" id="berry_size4" name="berry_size4" value=""> 
</aside> 

... or ... 

// this is a single, so no extra class and .... 
<aside class="left"> 
<label for="other_item">Other Item</label> 
<br/><input type="text" id="other_item" name="other_item" value=""> 
</aside> 

我看到這真的熬煮至被讀下一個數組中的鍵名(我扯下了名稱和使用我的版本的整數),至少我認爲這是應該做的正確方法?

+1

這是比較容易,也許,改變陣列 – Cheery 2012-02-22 00:52:52

+0

的格式,你不能有三個在數組中使用相同的鍵,即'other_item'。請詳細說明,否則您的問題並不十分清楚(嚴格地說)。 – hakre 2012-02-22 00:54:28

+0

我同意這一個Cheery。嘗試去尋找一個數組的數組。 – Shattuck 2012-02-22 00:55:02

回答

2
$arr = array(
    'other_item' => 'value', 

    // this one ranges 1-3 
    'first_name1' => 'value', 
    'first_name2' => 'value', 
    'first_name3' => 'value', 

    // this one ranges 1-4 
    'next_name1' => 'value', 
    'next_name2' => 'value', 
    'next_name3' => 'value', 
    'next_name4' => 'value', 

    'other_item' => 'value', 

    // this one ranges 1-4 
    'last_name1' => 'value', 
    'last_name2' => 'value', 
    'last_name3' => 'value', 
    'last_name4' => 'value', 

    'other_item' => 'value' 
); 

$newarr = array(); 
foreach($arr as $key=>$value) 
{ 
    if (preg_match('#^([^\d]+)#', $key, $matches)===1) 
    $newarr[$matches[1]][] = $value; 
} 
print_r($newarr); 

輸出:

Array 
(
    [other_item] => Array 
     (
      [0] => value 
     ) 

    [first_name] => Array 
     (
      [0] => value 
      [1] => value 
      [2] => value 
     ) 

    [next_name] => Array 
     (
      [0] => value 
      [1] => value 
      [2] => value 
      [3] => value 
     ) 

    [last_name] => Array 
     (
      [0] => value 
      [1] => value 
      [2] => value 
      [3] => value 
     ) 

) 

並做任何你想做的事情。這樣的代碼(只是一個例子,並不是一個很不錯的一個)

foreach($newarr as $name => $block) 
{ 
    $cnt = count($block); 
    echo '<aside class="left'.($cnt>1?' row' . $cnt:'').'"> 
     <label for="' . $name . ($cnt>1?'1':''). '">' . 
       ucwords(str_replace('_', ' ', $name)) . '</label> 
     <br/>'; 
    foreach($block as $key=>$element) 
    { 
    echo ($key>0?'&nbsp;':'') . '<input type="text" value="" name="' . $name . 
     ($cnt>1?($key+1):'') . '" id="' . $name . 
     ($cnt>1?($key+1):'') . '">' . "\n"; 
    } 
    echo '</aside>' . "\n"; 
} 

它提供:

<aside class="left"> 
<label for="other_item">Other Item</label> 
<br/><input type="text" value="" name="other_item" id="other_item"> 
</aside> 
<aside class="left row3"> 
<label for="first_name1">First Name</label> 
<br/><input type="text" value="" name="first_name1" id="first_name1"> 
&nbsp;<input type="text" value="" name="first_name2" id="first_name2"> 
&nbsp;<input type="text" value="" name="first_name3" id="first_name3"> 
</aside> 
<aside class="left row4"> 
<label for="next_name1">Next Name</label> 
<br/><input type="text" value="" name="next_name1" id="next_name1"> 
&nbsp;<input type="text" value="" name="next_name2" id="next_name2"> 
&nbsp;<input type="text" value="" name="next_name3" id="next_name3"> 
&nbsp;<input type="text" value="" name="next_name4" id="next_name4"> 
</aside> 
<aside class="left row4"> 
<label for="last_name1">Last Name</label> 
<br/><input type="text" value="" name="last_name1" id="last_name1"> 
&nbsp;<input type="text" value="" name="last_name2" id="last_name2"> 
&nbsp;<input type="text" value="" name="last_name3" id="last_name3"> 
&nbsp;<input type="text" value="" name="last_name4" id="last_name4"> 
</aside> 
0

據我可以告訴你只是想根據你的'鑰匙類型'來修改你的輸出。我想是這樣的:

foreach($obj as $key => $val) 
{ 
    $parts = explode('_', $key); 
    switch($parts[0]) 
    { 
     case 'first': 
      // Do something here 
      break; 
     case 'other': 
      // Do something here 
      break; 
     case 'next': 
      // Do something here 
      break; 
     case 'last': 
      // Do something here 
      break; 
    } 
} 

我想我可能會然而失去了一些東西,因爲你似乎是檢查「下一步」元素......

+0

不,我想編輯它基於關鍵字 – ehime 2012-02-22 01:02:45

+0

後面的整數嗯,如果你需要計算每種類型的數量,那麼@Cheery已經有了正確的想法,我想:) – halfer 2012-02-22 01:14:54