Имплозировать массив выдавая ошибку - PullRequest
0 голосов
/ 20 декабря 2011

Я пытаюсь внедрить массив для вставки, но я не могу вызвать ошибку, которую я сделал. implode () [function.implode]: переданы неверные аргументы * Обратите внимание, мой размер массива не является фиксированным, поэтому я использовал foreach *

Структура массива

[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)

Ответы [ 6 ]

1 голос
/ 20 декабря 2011

Ваша структура массива не соответствует желаемому выходному формату.Так что взорваться не получится.

<?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 голос
/ 20 декабря 2011

Попробуйте:

implode(',', $productcount['attcode']);
//same for others
0 голосов
/ 20 декабря 2011

Я думаю, вы создали неправильный массив для вывода, который вы хотите:

$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;
0 голосов
/ 20 декабря 2011

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 голосов
/ 20 декабря 2011

Вы пропустили самую важную часть сообщения об ошибке;где он говорит, что 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 голосов
/ 20 декабря 2011

implode работает с массивами, а не со значениями, добавляет необходимую строку с элементами массива.Вы передаете значение массива для взрыва.Пожалуйста, проверьте это для деталей

...