使用for和array_flip来模拟多个foreach。有没有更好的办法?
有没有更好的方法来做这样的事情?这很好,但我认为有可能获得相同结果的捷径。我想增加更多的数组很容易,我可以把它变成一个函数,并有for循环外,但仍然。使用for和array_flip来模拟多个foreach。有没有更好的办法?
只是想知道。
<?
$array1 = array("test1","test2","test3","test4");
$array2 = array("dest1","test2","dest3","dest4");
for ($i=0; $i<count($array1); $i++) { //FOR STATEMENT TO GET MULTIPLE ARRAYS REGISTERED AS A FOREACH-STYLE
$val1 = $array1[$i]; //VALUES GET
$val2 = $array2[$i];
$array1 = array_flip($array1); //ARRAY IS FLIPPED FROM KEY => VALUE TO VALUE => KEY SO THAT THE KEYS CAN BE GET. REMEMBER TO SWITCH IT BACK.
$array2 = array_flip($array2);
$key1 = $array1[$val1]; //NOW MUST ITERATE THROUGH USING VALUES ABOVE BECAUSE THE KEYS ARE NO LONGER NUMBERS.
$key2 = $array2[$val2];
$array1 = array_flip($array1); //SWITCHING IT BACK.
$array2 = array_flip($array2);
echo $key1 . "=>" . $val1 . "<br />";
echo $key2 . "=>" . $val2 . "<br />";
}
var_dump($array1);
?>
您已经拥有阵列的“keys”,$i
。
for ($i=0; $i<count($array1); $i++) {
$val1 = $array1[$i]; // You're getting the value from the array,
$val2 = $array2[$i]; // you already have the key, $i
echo $i . "=>" . $val1 . "<br />";
echo $i . "=>" . $val2 . "<br />";
}
编辑:如果两个数组有相同的键,你可以foreach
超过一个,并从其他的价值。
foreach($array1 as $key=>$val1){
$val2 = $array2[$key];
echo $key . "=>" . $val1 . "<br />";
echo $key . "=>" . $val2 . "<br />";
}
哦对了....其实我试图用数组作为关键字没有数字。像(ID => Person)类型的东西...我完全忘记了数字不会因为这个而工作,所以我必须使它成为next()和current(),而不是通过$ i。 – user1159454 2012-04-02 21:54:53
@ user1159454:这两个阵列是否有相同的密钥?如果是这样,请尝试我添加的第二个示例。 – 2012-04-02 21:59:15
我可以为目前最好的
$arrayList = Array($array1, $array2); // Add every array here
$keyArr = Array();
foreach ($arrayList as $key => $value)
{
// Put the keys of every array in $arrayList in an other array
$keyArr[$key] = array_keys($value);
}
// Loop while $i is lower than the highest index of the bigest array in $arrayList
for ($i = 0; $i < count(max($arrayList)); $i++)
{
// Loop every array in $arrayList
foreach ($arrayList as $arrKey => $arr)
{
// If the array in $arrayList has at least $i element
if ($i < count($arr))
{
// Get the key of the $i-n element in the array (take it from the $keyArr defined above)
$key = $keyArr[$arrKey][$i];
// Get the value of the $i-n element in the array
$val = $arr[$key];
}
}
}
这似乎过于复杂。 – 2012-04-02 22:03:05
我编辑它,这是我发现一次“foreach”很多数组而不操作键和循环每个数组的唯一方法。 – mamadrood 2012-04-02 22:06:02
究竟是你想做些什么?数组的键只是'$ i'。 – 2012-04-02 21:46:51