Foreach Array by incrementing another array

6

With a question about foreach and incrementing another helper to perform an insert in the database, see:

When I send a form via post I get the following array as a result:

array (size=2)
  'quantidade' => 
    array (size=8)
      0 => string '10' (length=2)
      1 => string '11' (length=2)
      2 => string '15' (length=0)
      3 => string '22' (length=0)
      4 => string '10' (length=0)
      5 => string '9' (length=0)
      6 => string '0' (length=0)
      7 => string '35' (length=0)
  'produto' => 
    array (size=8)
      0 => string '11' (length=1)
      1 => string '18' (length=1)
      2 => string '19' (length=1)
      3 => string '21' (length=1)
      4 => string '22' (length=2)
      5 => string '25' (length=2)
      6 => string '29' (length=2)
      7 => string '22' (length=2)

As I'm using CodeIgniter to get the data from the Form, I'm using the following structure:

foreach ($this->input->post() as $chave => $valor) {
  //o array aux aqui
}

Some idea how to generate this result, taking the first value of each element and inserting it in an auxiliary array:

Type like this:

$array_aux[0] = array('quantidade' => 10, 'produto' => 11)
...
$array_aux[7] = array('quantidade' => 35, 'produto' => 22)
    
asked by anonymous 14.11.2016 / 12:43

3 answers

5
$arrayForm = array();

foreach($array['quantidade'] as $key => $val){
    $arrayForm[] = array(
                   'quantidade' => $val, 
                   'produto'    => $array['produtos'][$key]
    ); 
}

echo '<pre>';
print_r($arrayForm);
echo '</pre>';
    
14.11.2016 / 12:50
6

Probably what you want is this:

array_combine( array $keys , array $values );

In your case:

$array_aux = array_combine( $array['quantidade'], $array ['produto'] );

See working at IDEONE

IDEONE


Manual:

  

link

    
14.11.2016 / 12:55
3

If you are going to mount an array and make an insert via the CI's querybuilder, normally the key names should be the column names in the database, in which case you can use the array_map() function to combine the values. >

The anonymous function returns an array that will have the first (and remaining) item of $a1['quantidade'] and $a2['produto'] as its value.

$a1 = array('quantidade' => array(10,11,15,22,10,9,0,35));
$a2 =  array('produto' => array(11,18,19,21,22,25,29,22));

$r = array_map(function($q, $p){ return ['quantidade' => $q, 'produto' => $p] ;}, $a1['quantidade'], $a2['produto']); 

echo "<pre>";
print_r($r);

Output:

Array
(
    [0] => Array
        (
            [quantidade] => 10
            [produto] => 11
        )

    [1] => Array
        (
            [quantidade] => 11
            [produto] => 18
        )

    [2] => Array
        (
            [quantidade] => 15
            [produto] => 19
        )

    [3] => Array
        (
            [quantidade] => 22
            [produto] => 21
        )

    [4] => Array
        (
            [quantidade] => 10
            [produto] => 22
        )

    [5] => Array
        (
            [quantidade] => 9
            [produto] => 25
        )

    [6] => Array
        (
            [quantidade] => 0
            [produto] => 29
        )

    [7] => Array
        (
            [quantidade] => 35
            [produto] => 22
        )

)
    
14.11.2016 / 14:10