Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как из двух массивово сделать один с повторяющимеся элементами?
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Как из двух массивово сделать один с повторяющимеся элементами?

Страниц (1): [1]
 

1. frost18 - 08 Июля, 2011 - 11:39:26 - перейти к сообщению
Есть к примеру массивы:
$one = array (2, 8 , 14 , 7 , 11, 9);
$two = array (18, 2, 6, 8, 13, 19);

Как сделать один с повторными элементами 2, 8 без двойного цикла?
3. DeepVarvar - 08 Июля, 2011 - 12:51:52 - перейти к сообщению
А так не сработает: $arr = $arr1 + $arr2; ???
4. EuGen - 08 Июля, 2011 - 12:57:44 - перейти к сообщению
Нет. Это вообще не удовлетворяет условию задачи. Сложение даст Вам простое слияние, тогда как автору требуется пересечение.
5. DeepVarvar - 08 Июля, 2011 - 13:13:54 - перейти к сообщению
Значит я неверно понял задачу.
А именно ответ на то как я её понял, лежит тут: array_merge
6. Мелкий - 08 Июля, 2011 - 13:24:32 - перейти к сообщению
EuGen пишет:
Сложение даст Вам простое слияние, тогда как автору требуется пересечение.

А можно уточнить, действительно ли даст, и на какой версии. У меня не получилось сложить массивы, в результате остался только первый.
7. EuGen - 08 Июля, 2011 - 13:36:20 - перейти к сообщению
Оператор + всегда ведет себя так, что сливает значения по ключам. Пример:
PHP:
скопировать код в буфер обмена
  1. $rgData0=array(1,'test',4);
  2. $rgData1=array('foo', 6, 'bar');
  3. $rgData2=array('fruits'=>'banana, cherry', 'cars'=>'audi, bmw');
  4. $rgData3=array('baz','cars'=>'audi, bmw');
  5. $rgData=$rgData0+$rgData1;
  6. var_dump($rgData);
  7. $rgData=$rgData0+$rgData2;
  8. var_dump($rgData);
  9. $rgData=$rgData0+$rgData3;
  10. var_dump($rgData);

Результат:
PHP:
скопировать код в буфер обмена
  1.   0 => int 1
  2.   1 => string 'test' (length=4)
  3.   2 => int 4
  4.  
  5.   0 => int 1
  6.   1 => string 'test' (length=4)
  7.   2 => int 4
  8.   'fruits' => string 'banana, cherry' (length=14)
  9.   'cars' => string 'audi, bmw' (length=9)
  10.  
  11.   0 => int 1
  12.   1 => string 'test' (length=4)
  13.   2 => int 4
  14.   'cars' => string 'audi, bmw' (length=9)
  15.  

Так как у первого и второго массива ключи одинаковые (численные: 0,1,2), то остались только значения первого.
Во втором случае ключи разные - вот и остались ключи (и, стало быть, значения) обоих массивов
В третьем случае значения числового ключа второго массива не сохранилось - этот числовой индекс присутствует в первом.

Строго говоря, + - это оператор объединения, а не слияния.
http://www.php.net/manual/en/lan...rators.array.php

Для понимания проще помнить, что массивы из "только значений" имеют тем не менее числовые индексы.
8. Мелкий - 08 Июля, 2011 - 13:51:28 - перейти к сообщению
Благодарю за разъяснение.

 

Powered by ExBB FM 1.0 RC1