使用for和array_flip来模拟多个foreach。有没有更好的办法?

使用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); 

    ?> 
+0

究竟是你想做些什么?数组的键只是'$ i'。 – 2012-04-02 21:46:51

您已经拥有阵列的“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 />"; 
} 
+0

哦对了....其实我试图用数组作为关键字没有数字。像(ID => Person)类型的东西...我完全忘记了数字不会因为这个而工作,所以我必须使它成为next()和current(),而不是通过$ i。 – user1159454 2012-04-02 21:54:53

+0

@ 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]; 
    } 
    } 
} 
+0

这似乎过于复杂。 – 2012-04-02 22:03:05

+0

我编辑它,这是我发现一次“foreach”很多数组而不操作键和循环每个数组的唯一方法。 – mamadrood 2012-04-02 22:06:02