2012-04-02 1 views
0

Есть ли лучший способ сделать что-то подобное? Это нормально, но я думаю, что, вероятно, есть ярлык, чтобы получить те же результаты. Я предполагаю, что просто добавить несколько массивов, я мог бы просто превратить его в функцию и оставить цикл for вне его, но все же.Использование для and 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'. –

ответ

1

У вас уже есть "ключи" для массивов, $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 />"; 
} 

EDIT: Если оба массива имеют те же ключи, вы можете foreach по одному, и получить значение от другого.

foreach($array1 as $key=>$val1){ 
    $val2 = $array2[$key]; 

    echo $key . "=>" . $val1 . "<br />"; 
    echo $key . "=>" . $val2 . "<br />"; 
} 
+0

О, ну ... ну, на самом деле я пытаюсь использовать это с массивами, которые не имеют чисел в качестве ключей. Например, (ID => Person) типа stuff ... Я полностью забыл, что числа не будут работать из-за этого, поэтому мне придется сделать его next() и current() вместо перехода на $ i. – user1159454

+0

@ user1159454: У обоих массивов одинаковые ключи? Если да, попробуйте второй пример, который я добавил. –

1

Лучший я могу сделать на данный момент

$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

Это кажется слишком сложным. –

+0

Я отредактировал его, это единственный способ, с помощью которого я обнаружил «foreach» много массива за один раз, не манипулируя ключами и не зацикливая каждый массив. – mamadrood