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 :: Версия для печати :: preg_replace
Форумы портала PHP.SU » » Вопросы новичков » preg_replace

Страниц (4): [1] 2 3 4 »
 

1. Belohalatny - 14 Декабря, 2011 - 21:15:47 - перейти к сообщению
Всем привет!

есть у меня массив, в котором есть элементы вида:
CODE (html):
скопировать код в буфер обмена
  1. [0] => 744/149
  2. [1] => 743/140
  3. [2] => 742/118
  4. [3] => 741/118
  5. [4] => 740/112
  6. [5] => 739/112


А мне нужно подставить в начало каждого элемента base/au/3/, чтобы получилось так:
CODE (html):
скопировать код в буфер обмена
  1. [1] => base/au/3/743/140
  2. [2] => base/au/3/742/118
  3. [3] => base/au/3/741/118
  4. [4] => base/au/3/740/112
  5. [5] => base/au/3/739/112


Подскажите, пожалуйста, как сделать?
2. DlTA - 14 Декабря, 2011 - 21:53:59 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. foreach($heveArray as $key=>$item){
  2.   $heveArray[$key] = "base/au/3/".$item;
  3. }
3. Belohalatny - 14 Декабря, 2011 - 22:48:52 - перейти к сообщению
Да, с одним массивом получилось, а вот как сделать, если их много (более 100 таких), не могу врубиться...

CODE (html):
скопировать код в буфер обмена
  1.     [0] => Array
  2.         (
  3.             [0] => Array
  4.                 (
  5.                     [1] => Array
  6.                         (
  7.                             [0] => base/au/3/710/708
  8.                         )
  9.  
  10.                     [2] => Array
  11.                         (
  12.                             [0] => 2011
  13.                         )
  14.  
  15.                 )
  16.  
  17.         )
  18.  
  19.     [1] => Array
  20.         (
  21.             [0] => Array
  22.                 (
  23.                     [1] => Array
  24.                         (
  25.                             [0] => 744/149
  26.                             [1] => 743/140
  27.                             [2] => 742/118
  28.                             [3] => 741/118
  29.                             [4] => 740/112
  30.                             [5] => 739/112
  31.                             [6] => 738/79
  32.                             [7] => 737/79
  33.                             [8] => 736/73
  34.                             [9] => 735/73
  35.                             [10] => 734/58
  36.                             [11] => 733/58
  37.                             [12] => 732/5
  38.                             [13] => 731/5
  39.                             [14] => 730/22
  40.                             [15] => 729/23
  41.                             [16] => 728/23
  42.                             [17] => 727/24
  43.                             [18] => 726/24
  44.                             [19] => 725/24
  45.                         )
  46.  
  47.                     [2] => Array
  48.                         (
  49.                             [0] => 1994
  50.                             [1] => 1993
  51.                             [2] => 1992
  52.                             [3] => 1991 4A-M-000 001 >>
  53.                             [4] => 1991              >> 44-M-050 000
  54.                             [5] => 1990
  55.                             [6] => 1989
  56.                             [7] => 1988 44-J-200 100 >>
  57.                             [8] => 1988              >> 44-J-200 099
  58.                             [9] => 1987
  59.                             [10] => 1986
  60.                             [11] => 1985
  61.                             [12] => 1984
  62.                             [13] => 1983
  63.                             [14] => 1982
  64.                             [15] => 1981
  65.                             [16] => 1980
  66.                             [17] => 1979
  67.                             [18] => 1978
  68.                             [19] => 1977
  69.                         )
  70.  
  71.                 )
  72.  
  73.         )
  74.  
  75.     [2] => Array
  76.         (
  77.             [0] => Array
  78.                 (
  79.                     [1] => Array
  80.                         (
  81.                             [0] => 723/139
  82.                             [1] => 722/139
  83.                             [2] => 721/119
  84.                             [3] => 720/119
  85.                             [4] => 719/88
  86.                             [5] => 718/88
  87.                             [6] => 717/88
  88.                             [7] => 716/88
  89.                             [8] => 715/62
  90.                             [9] => 714/62
  91.                             [10] => 713/62
  92.                             [11] => 712/62
  93.                         )
  94.  
  95.                     [2] => Array
  96.                         (
  97.                             [0] => 1994
  98.                             [1] => 1993
  99.                             [2] => 1992
  100.                             [3] => 1991 4A-M-000 001 >>
  101.                             [4] => 1991              >> 44-M-050 000
  102.                             [5] => 1990
  103.                             [6] => 1989
  104.                             [7] => 1988 44-J-200 100 >>
  105.                             [8] => 1988              >> 44-J-200 099
  106.                             [9] => 1987
  107.                             [10] => 1986
  108.                             [11] => 1985
  109.                         )
  110.  
  111.                 )
  112.  
  113.         )
  114.  
  115.     [3] => Array
  116.         (
  117.             [0] => Array
  118.                 (
  119.                     [1] => Array
  120.                         (
  121.                             [0] => 751/248
  122.                             [1] => 750/248
  123.                             [2] => 749/248
  124.                             [3] => 748/248
  125.                             [4] => 747/248
  126.                             [5] => 746/248
  127.                         )
  128.  
  129.                     [2] => Array
  130.                         (
  131.                             [0] => 2005
  132.                             [1] => 2004
  133.                             [2] => 2003
  134.                             [3] => 2002
  135.                             [4] => 2001
  136.                             [5] => 2000
  137.                         )
  138.  
  139.                 )
  140.  
  141.         )


PHP:
скопировать код в буфер обмена
  1.                            foreach($years[$a][0][1] as $key=>$item){
  2.                            $years[0][0][1][$key] = "base/au/3/".$item;
  3.                            }
4. DlTA - 14 Декабря, 2011 - 22:55:47 - перейти к сообщению
замечательное слово
"рекурсия"
нужна функция которая будет пробегать по массиву, и менять значения

вопрос в следующем: нужно менять все значения или только те которые имеют внутри слеш?
5. Belohalatny - 14 Декабря, 2011 - 22:56:38 - перейти к сообщению
Да, только те, которые имеют слэш
6. Panoptik - 14 Декабря, 2011 - 23:04:19 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.     function add_url(&$array) {
  2.       if(count($array)){
  3.         foreach($array as $key => $item) {
  4.           if(strpos($item,'/')) {
  5.             $array[$key]="base/au/3/".$item;
  6.           } elseif(is_array($item) {
  7.             add_url($item);
  8.           }
  9.         }
  10.       }
  11.     }


чтото типа этого, хотя чувствую нужно немного доработать
7. DlTA - 14 Декабря, 2011 - 23:06:23 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function addPred($inProp){
  2.         if (is_array($inProp)){
  3.                 foreach($inProp as $key=>$item){
  4.                         $inProp[$key] = addPred($item);
  5.                 }
  6.         }
  7.         else{
  8.                 if(preg_match("/^\d+\/\d+$/i",$inProp)){
  9.                         $inProp = "base/au/3/".$inProp;
  10.                 }
  11.         }
  12.         return $inProp;
  13. }
  14.  
  15. var_dump(addPred(array("123/123",array("123","123/213"))));


CODE (text):
скопировать код в буфер обмена
  1. array
  2.   0 => string 'base/au/3/123/123' (length=17)
  3.   1 =>
  4.     array
  5.       0 => string '123' (length=3)
  6.       1 => string 'base/au/3/123/213' (length=17)

(Добавление)
Panoptik
а это в эту тему?
Panoptik пишет:
function add_url(/2jmj7l5rSw0yVb-vlWAYkK-YBwk=Zm9ydW0vJiRhcnJheQ) {
  if(count($array)){
    foreach($array as $key => $item) {
      if(strpos($item,'/')) {
        $array[$key]="base/au/3/".$item;
      } elseif(isarray($item) {
        add_url(/2jmj7l5rSw0yVb-vlWAYkK-YBwk=Zm9ydW0vJGl0ZW0);
      }
    }
  }
}
8. Panoptik - 14 Декабря, 2011 - 23:09:03 - перейти к сообщению
угу, самое интересное что вот эту строку "/2jmj7l5rSw0yVb-vlWAYkK-YBwk=MmptajdsNXJTdzB5VmItdmxXQVlrSy1ZQndrPVptOXlkVzB2SkdsMFpXMA" добавил форум вместо вот этого "&$array"
9. Belohalatny - 14 Декабря, 2011 - 23:13:23 - перейти к сообщению
Хм, ни первая, ни вторая функции не сработали. Первая выдала кучу ошибок, вторая сработала без них, но ничего не поменялось. Вызывал вот так:

PHP:
скопировать код в буфер обмена
  1. function addPred($inProp){
  2.         if (is_array($inProp)){
  3.                 foreach($inProp as $key=>$item){
  4.                         $inProp[$key] = addPred($item);
  5.                 }
  6.         }
  7.         else{
  8.                 if(preg_match("/^\d+\/\d+$/i",$inProp)){
  9.                         $inProp = "base/au/3/".$inProp;
  10.                 }
  11.         }
  12.         return $inProp;
  13. }
  14.  
  15. addPred($years);

или нужно было указать массив с ключами?
10. DlTA - 14 Декабря, 2011 - 23:16:00 - перейти к сообщению
Belohalatny
использовали код 1 в 1
или чет намудрили?
ниже функции пример вызова и результат работы
11. Belohalatny - 14 Декабря, 2011 - 23:17:57 - перейти к сообщению
Вот как скопировал в свое предыдущее сообщение код, абсолютно так же и использовал.
Результата нет, все старые значения ключей остались как были.
(Добавление)
пример вызова.
12. Panoptik - 14 Декабря, 2011 - 23:19:22 - перейти к сообщению
потому что функция вернет новый массив, верните значение в новый массив или в старый, и тогда смотрите результат

13. Belohalatny - 14 Декабря, 2011 - 23:22:22 - перейти к сообщению
Panoptik пишет:
потому что функция вернет новый массив, верните значение в новый массив или в старый, и тогда смотрите результат
Не понял ничего, если честно Недовольство, огорчение
Вот так надо сделать, после выполнения ф-ции например:
?
14. DlTA - 14 Декабря, 2011 - 23:23:42 - перейти к сообщению
вот так напишите вызов
$years = addPred($years);
(Добавление)
это функция а не процедура, и она возвращает значение
15. Belohalatny - 14 Декабря, 2011 - 23:26:03 - перейти к сообщению
Спасибо огромное, все значения изменились!

 

Powered by ExBB FM 1.0 RC1