Hey,

is he mogelijk om in een foreach loop 2 waardes mee tegeven

<?PHP
foreach($arr1, $arr2 as $value1, $value2){
$echo $value1;
$echo $value2;
}
?>

of kan dit niet?

ik heb namelijk een multidimensionale array met 2 keys die ik wil uitlaten lopen.

<?PHP
$kernen = array(
"kernen"=>array("naam", "naam2"),
"status"=> array(1, 2)
);
?>

Dit zou ik als antwoord geven als ik naar je vraagstelling kijk:
<?php
  foreach ($kernen as $key1 => $value1) {
    foreach ($value1 as $key2 => $value2) {
      
    }
  }
?>


En dit als ik naar je array kijk:
<?php
  for ($i=0;count($kernen['kernen']);$i++) {
    $kern = $kernen['kernen'][$i];
    $status = $kernen['status'][$i];
  }
?>
In dient de array in de array altijd 2 key bevat is dit beter denk ik
<?php
foreach ($kernen as $key1 => $value1) {
echo $value1[0];
echo "</br>";
echo $value1[1];
}
?>
Hoe ziet je array eruit, en wat wil je bereiken=
Flip komt het dichtst in de buurt (maar z'n conditie in de for-lus is niet helemaal lekker)
<?php

foreach($kernen['kernen'] as $index => $naam)
{
echo $naam;
echo $kernen['status'][$index];
}

?>
Ha hier heb ik me tijdje geleden ook mee bezig gehouden. Op deze manier controleer ik nu altijd m'n formulier input:

<?php

$verplichteVelden =
array
(
'bericht' => array(5 => 45), //minimaal 5, maximaal 45.
'naam' => array(3 => 25) //minimaal 3, maximaal 25.
);

foreach($verplichteVelden as $veldnaam => $eisen )
{
foreach( $eisen as $minimaal => $maximaal )
{
if(strlen(trim($_POST[$veldnaam])) < $minimaal)
{
array_push($error, '<li>Uw '.$veldnaam.' is te kort. Minimaal <strong>'.$minimaal.'</strong> karakters!</li>');
}
if(strlen(trim($_POST[$veldnaam])) > $maximaal)
{
array_push($error, '<li>Uw '.$veldnaam.' is te lang. Maximaal <strong>'.$maximaal.'</strong> karakters!</li>');
}
}
}
?>
@Jelmer

werkt niet als de sub array verschillende indexes heeft

ik geloof bij een foreach wordt intern ook een count gedaan, dus zou niet veel verschil moeten geven in uitvoer tijd.

en ik heb gemerkt dat $i vaak handig is, bijv je hebt een variable die aangeeft hoe vaak de loop is gedaan.
@Flip: in dit geval zal het goed gaan :)

Jouw scriptje miste nog de vergelijking in de voorwaarde:
for ($i=0; count($kernen['kernen']); $i++)

moest zijn
for ($i=0; $i < count($kernen['kernen']); $i++)


Intern werkt foreach trouwens niet met een count. Je kan immers ook key->value paren prima doorwandelen met een foreach-lus, ook wanneer $key eigenlijk niet voorspelbaar is zoals wel het geval is bij deze array, waar $key gewoon van 0 tot n loopt. Daarnaast kan je in een foreach-lus alles gooien wat de IteratorAggregate interface implementeert, en dat is heel leuk wanneer je veel met objecten in PHP werkt.

Reageren