Этот цикл будет продолжаться до длины самого длинного массива и будет возвращать ноль, если в одном из массивов нет соответствующих элементов. Попробуйте!
$a = array(1 => "a",25 => "b", 10 => "c",99=>"d");
$b = array(15=>1,5=>2,6=>3);
$ao = new ArrayObject($a);
$bo = new ArrayObject($b);
$ai = $ao->getIterator();
$bi = $bo->getIterator();
for (
$ai->rewind(),$bi->rewind(),$av = $ai->current(),$bv = $bi->current();
list($av,$bv) =
array(
($ai->valid() ? $ai->current() : null),
($bi->valid() ? $bi->current() : null)
),
($ai->valid() || $bi->valid());
($ai->valid() ? $ai->next() : null),($bi->valid() ? $bi->next() : null))
{
echo "\$av = $av\n";
echo "\$bv = $bv\n";
}
Я не могу точно сказать из вопроса, как именно вы хотите пересечь два массива. Для вложенного foreach
вы просто пишете
foreach ($myArray as $k => $v) {
foreach ($mySecondArray as $kb => $vb {
}
}
Однако вы можете делать все что угодно с некоторым творческим использованием функций обратного вызова. В этом случае анонимная функция возвращает два элемента из каждого массива на каждой итерации. Затем легко использовать значение итерации в виде массива или разбить его на переменные, используя list()
, как показано ниже.
Это также дает дополнительное преимущество работы независимо от структуры ключа. Я чисто основан на упорядочении элементов массива. Просто используйте соответствующую функцию сортировки, если элементы не в порядке.
Он не беспокоится о длине массивов, так как об ошибках не сообщается, поэтому следите за пустыми значениями.
$a = array("a","b","c");
$b = array(1,2,3);
foreach (
array_map(
create_function(
'$a,$b', 'return array($a,$b);'
)
,$a,$b
)
as $value
)
{
list($a,$b) = $value;
echo "\$a = $a\n";
echo "\$b = $b\n";
}
выход
$a = a
$b = 1
$a = b
$b = 2
$a = c
$b = 3
Вот еще один вариант для вас, который останавливается на окончании любого из списков. То же, что и использование min(count(a),count(b)
. Полезно, если у вас есть массивы одинаковой длины. Если кто-то может сделать это, продолжайте к max(count(a),count(b))
, дайте мне знать.
$ao = new ArrayObject($a);
$bo = new ArrayObject($b);
$ai = $ao->getIterator();
$bi = $bo->getIterator();
for (
$ai->rewind(),$bi->rewind();
$av = $ai->current(),$bv=$bi->current();
$ai->next(),$bi->next())
{
echo "\$av = $av\n";
echo "\$bv = $bv\n";
}