2011-12-20 32 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;