2011-12-20 92 views
0

我試圖爆炸一個數組來執行插入,但我無法觸發我做的錯誤。 破滅()[function.implode]:無效參數傳遞 *請注意我的陣列尺寸不固定,所以我使用的foreach *Implode數組發出錯誤

陣列結構

[attcode] => Array ([0] => [1] => [2] =>) 
[color] => Array ([0] => [1] => [2] =>) 
[size] => Array ([0] => [1] => [2] =>) 
[stock] => Array ([0] => [1] => [2] =>) 

工作碼

$attstring = array();//array for storing query set 

    foreach($productcount['attcode'] as $attcode){ 
      $attstring[] = "'" . implode("','", $attcode)."'"; 
      } 

     foreach($productcount['color'] as $attcolor){ 

      $attstring[] = "'" . implode("','", $attcolor)."'"; 
      } 

    foreach($productcount['size'] as $attsize){ 
      $attstring[] = "'" . implode("','", $attsize)."'"; 
      } 

    foreach($productcount['stock'] as $attstock){ 
      $attstring[] = "'" . implode("','", $attstock) . "'"; 
      } 


    $finalvalue = "(" . implode("), (", $attstring) . ")"; 

      echo $finalvalue; 

所需輸出

('code','color','size',stock), 
('code','color','size',stock), 
('code','color','size',stock) 
+0

我很好奇,看到實際的陣列布局。是0,1,2的值?按鍵? – Dutchie432 2011-12-20 09:18:21

+2

foreach塊中的implode是錯誤的,因爲你沒有傳遞數組 – Dan 2011-12-20 09:18:46

+0

foreach迭代數組,所以$ attcode是一個字符串,而不是數組,這就是爲什麼implode不工作。 – Demelziraptor 2011-12-20 09:25:07

回答

1

您的數組結構不符合所需的輸出格式。所以內爆不起作用。

<?php 

$my_array = ARRAY(); 
$my_array['attcode'] = Array (0 => 0, 1 => 1, 2 => 2); 
$my_array['color'] = Array (0 => 'red', 1 => 'green', 2 => 'blue'); 
$my_array['size'] = Array (0 => 100, 1 => 200, 2 => 300); 
$my_array['stock'] = Array (0 => 11, 1 => 22, 2 => 33); 

$loop_me = count($my_array['attcode']) - 1; 
for ($i=0; $i<=$loop_me; $i++) { 
    echo '<div>Code: '.$my_array['attcode'][$i].' | Color: '.$my_array['color'][$i].' | Size: '.$my_array['size'][$i].' | Stock: '.$my_array['stock'][$i].'</div>'; 
} 

?> 

輸出

Code: 0 | Color: red | Size: 100 | Stock: 11 | 
Code: 1 | Color: green | Size: 200 | Stock: 22 | 
Code: 2 | Color: blue | Size: 300 | Stock: 33 | 
+1

我認爲這個答案會更好,如果你爲for循環(for $($ i = 0,$ j = count($ my_array ['attcode']); $ i <$ j; $ i ++)''。 – 2011-12-20 09:29:37

+0

是的,對,認爲錯誤只有3個,但是固定的是數組索引attcode,color,size,stock;) – djot 2011-12-20 09:31:31

1

嘗試:

 
implode(',', $productcount['attcode']); 
//same for others 
0

內爆可與陣列不是它的值,它追加與陣列元件所期望的字符串。你正在傳遞數組值給implode。請詳細檢查this

0

你忽略了錯誤信息的最重要的部分;它表示implode期望一個數組並且已經傳遞了一個字符串。基於所需的輸出,我想你想是這樣的:

<?php 

$productcount = array( 
    'attcode' => array ('0', '1', '2'), 
    'color' => array ('red', 'green', 'blue'), 
    'size' => array('0', '1', '2'), 
    'stock' => array (100, 200, 300) 
); 

$outcome = array(); 

foreach($productcount['attcode'] as $index => $code) { 
    $outcome[] = array(
     'attcode' => $code, 
     'color' => isset($productcount['color'][$index]) ? $productcount['color'][$index] : null, 
     'size' => isset($productcount['size'][$index]) ? $productcount['size'][$index] : null, 
     'stock' => isset($productcount['stock'][$index]) ? $productcount['stock'][$index] : null 
    ); 
} 

var_dump($outcome); 
0

http://php.net/manual/en/function.implode.php

$attstring = array();//array for storing query set 

foreach($productcount as $attributeCount){ 
    $attstring[] = "'" . implode("','", $attributeCount)."'"; 
} 

$finalvalue = "(" . implode("), (", $attstring) . ")"; 

echo $finalvalue; 
0

我想你已經建立了你想要的輸出錯誤的數組:

$products = array(); 
$products[] = array('attrcode' => 'XXXX', 'color' => 'black', 'size' => '12', 'stock' => 'yes'); 
$products[] = array('attrcode' => 'XXXX', 'color' => 'white', 'size' => '5', 'stock' => 'no'); 

$imploded_products = array(); 
foreach ($products as $product) { 
    $imploded_products[] = "'".implode("','", $product)."'"; 
} 

$finalvalue = "(".implode("), (", $imploded_products).")"; 

echo $finalvalue;