2016-09-07 1 views
1

J'ai une fonction dans ma classe qui contient plusieurs tableaux, il ressemble à ceci:Php chaîne garniture de valeurs tableau

protected function getTextItems() 
{ 
    if($this->hasChapters() && !$this->hasImages() && !$this->hasExtras()) 
    { 
     return [[ 
      'title' => 'test1', 
      'position0' => ['x0' => '165', 'x1' => '400', 'y0' => '265', 'y1' => '400'], 
      'position1' => ['x0' => '165', 'x1' => '405', 'y0' => '265', 'y1' => '405'], 
     ], 
     [ 
      'title' => 'test2', 
      'position0' => ['x0' => '295', 'x1' => '400', 'y0' => '395', 'y1' => '400'], 
      'position1' => ['x0' => '295', 'x1' => '405', 'y0' => '395', 'y1' => '405'], 
     ], 
     [ 
      'title' => 'test3', 
      'position0' => ['x0' => '425', 'x1' => '400', 'y0' => '525', 'y1' => '400'], 
      'position1' => ['x0' => '425', 'x1' => '405', 'y0' => '525', 'y1' => '405'], 
     ]]; 
    } 
} 

J'ai essayé de créer la chaîne (commande) avec ceci:

$itemCounter = 0; 
    $positionCounter = 0; 
    $recItemData = $this->getTextItems(); 
    foreach ($recItemData as $recItemDataKey => $recItemDataValue) 
    { 
     $rec = 'convert -size 720x480 xc:black -strokewidth 5 '; 
     $rec .= '-stroke lime '; 
     $rec .= '-draw "line ' . $recItemData[$itemCounter]['position'.$positionCounter]['x0'] . ',' . $recItemData[$itemCounter]['position'.$positionCounter]['y0']; 
     $rec .= ' ' . $recItemData[$itemCounter]['position'.$positionCounter]['x0'] . ',' . $recItemData[$itemCounter]['position'.$positionCounter]['y0'] . '"'; 
     if($itemCounter % count($recItemData) == 0) 
     { 
      $rec .= ' -stroke blue '; 
     } 
     $rec .= ' -draw "line ' . $recItemData[$itemCounter]['position'.$positionCounter]['x1'] . ',' . $recItemData[$itemCounter]['position'.$positionCounter]['y1']; 
     $rec .= ' ' . $recItemData[$itemCounter]['position'.$positionCounter]['x1'] . ',' . $recItemData[$itemCounter]['position'.$positionCounter]['y1'] . '"'; 
     if($positionCounter <= count($recItemData)) 
     { 
      $itemCounter++; 
     } 
    } 

Actuellement, il imprime ce (ce qui est faux):

« convertir -size 720x480 xc: -strokewidth noir 5 -stroke chaux -draw "ligne 425525 425525" -draw "ligne 400400 400400" "

La sortie correcte devrait ressembler à ceci:

convertir -size 720x480 xc: -strokewidth noir 5 -stroke -draw chaux" ligne 165400 265400" -draw « ligne 295400 395400 » -draw « ligne 425400 525400 » -draw bleu -stroke « ligne 165405 265405 » -draw « ligne 295405 395405 » -draw « ligne 425405 525405 »

+0

Vous réinitialisant la valeur de '$ rec' chaque fois par votre boucle quand vous faites' $ rec = 'convertir -size 720x480 xc: -strokewidth noir 5', ' –

+0

ok je comprends, donc Je dois enregistrer les valeurs sur chaque boucle ou comment voulez-vous accomplir cela – utdev

+0

ah je pense que je l'ai eu merci – utdev

Répondre

0

Merci à PatrickQ I trouvé une solution. Le problème était que je réinitialisais la valeur de $rec sur chaque boucle.

Ce que j'ai simplement fait était de déclarer la variable $rec en dehors de la boucle.

$rec = 'convert -size 720x480 xc:black -strokewidth 5 '; 
foreach ($recItemData as $recItemDataKey => $recItemDataValue) 
{ 
    $rec .= '-stroke lime '; 
    $rec .= '-draw "line ' . $recItemData[$itemCounter]['position'.$positionCounter]['x0'] . ',' . $recItemData[$itemCounter]['position'.$positionCounter]['y0']; 
    $rec .= ' ' . $recItemData[$itemCounter]['position'.$positionCounter]['x0'] . ',' . $recItemData[$itemCounter]['position'.$positionCounter]['y0'] . '"'; 
    if($itemCounter % count($recItemData) == 0) 
    { 
     $rec .= ' -stroke blue '; 
    } 
    $rec .= ' -draw "line ' . $recItemData[$itemCounter]['position'.$positionCounter]['x1'] . ',' . $recItemData[$itemCounter]['position'.$positionCounter]['y1']; 
    $rec .= ' ' . $recItemData[$itemCounter]['position'.$positionCounter]['x1'] . ',' . $recItemData[$itemCounter]['position'.$positionCounter]['y1'] . '"'; 
    if($positionCounter <= count($recItemData)) 
    { 
     $itemCounter++; 
    } 
}