хорошо, поэтому у меня есть два массива
$array_one([a]=>2,[b]=>1,[c]=>1); $array_two([a]=>1,[b]=>2,[c]=>1);
Я хочу иметь возможность циклически перемещать оба этих массива одновременно, чтобы я мог делать простые сравнения. Я посмотрел на использование цикла foreach, но я могу обрабатывать информацию только по одному массиву за раз. Я также посмотрел на слияние массивов, но я не вижу возможности использовать это, так как мне нужны как ключи, так и значения для сравнения. есть ли у кого-нибудь решение этой проблемы? Я ценю ваше время в передовой.
чтобы быть конкретным в сравнении, я хочу что-то в такой степени
if ($keyone == $keytwo && $valuetwo <= $valueone) { print_r ($array_two); }
Можно ли использовать рекурсию для цикла вместо использования и итеративного цикла?
Если у них одинаковые ключи, вы можете просто array_keys
ключи и использовать их для индексации массивов с помощью array_keys
:
foreach(array_keys($array_one) as $key) { // do something with $array_one[$key] and $array_two[$key] }
Если вас беспокоят некоторые не существующие ключи, вы можете попробовать (например) array_key_exists($key,$array_two)
.
$array_one = array ( 'a' => 2, 'b' => 1, 'c' => 1 ); $array_two = array ( 'a' => 1, 'b' => 2, 'c' => 1 ); $iterator = new MultipleIterator (); $iterator->attachIterator (new ArrayIterator ($array_one)); $iterator->attachIterator (new ArrayIterator ($array_two)); foreach ($iterator as $item) { if ($item [0] > $item [1]) { ... } }
На самом деле это немного лишнее, но я вижу в нем определенную красоту.
Вы можете легко сделать это с помощью foreach.
$array_one([a]=>2,[b]=>1,[c]=>1); $array_two([a]=>1,[b]=>2,[c]=>1); foreach($array_one as $array_one_key => $array_one_value) { foreach($array_two as $array_two_key => $array_two_value) { if ($array_one_key == $array_two_key && $array_two_value <= $array_one_value) { print_r ($array_two); } } }
$array_one = array('a'=>2,'b'=>1,'c'=>1); $array_two = array('a'=>1,'b'=>2,'c'=>1); $keys = array_keys($array_one); for($x=0;$x<sizeof($array_one);$x++){ if($array_one[$keys[$x]] == $array_two[$keys[$x]]) { echo "equal key:".$keys[$x]."\n"; } }
вывод:
равный ключ: c
другой лучше LOL.
Я посмотрел на использование цикла foreach, но я могу обрабатывать информацию только по одному массиву за раз.
Если ключи в обоих массивах одинаковы, вы можете использовать foreach ():
foreach($array_one as $key => $value) { // do something to the first array $array_one[$key] = doSomething($value); // do something else to the second array $array_two[$key] = doSomethingElse($array_two[$key]); }
/* Make sure the array pointer is in the first position. */ reset($leftarray); reset($rightarray); /* Loop through the arrays. */ $i=0; while ($i < $totalitems) {echo current($leftarray)."<br>". current($rightarray)."<br>"; next($leftarray); next($rightarray); $i=$i+1; }
<?php foreach($array_one as $k => $v) { $result = $v . $array_two[$k]; } ?>
Могут быть лучшие способы, но это будет проходить через оба массива, используя foreach для array_one и reset, next и key для array_two.
$array_one = array('a'=>2,'b'=>1,'c'=>1,'x'=>3,'y'=>4); $array_two = array('a'=>1,'b'=>2,'c'=>1,'d'=>3,'e'=>8); $v2 = reset($array_two); $k2 = key($array_two); foreach ($array_one as $k1 => $v1) { if ($k1 == $k2 && $v1 == $v2 ) { echo "$k1 == $k2 && $v1 == $v2\n"; } elseif ($k1 == $k2) { echo "$k1 == $k2 Keys match\n"; } elseif ($v1 == $v2) { echo "$v1 == $v2 Values match\n"; } else { echo "$k1 $v1 $k2 $v2 No match\n"; } $v2 = next($array_two); $k2 = key($array_two); }