За последние 24 часа нас посетили 20545 программистов и 1635 роботов. Сейчас ищут 1034 программиста ...

Подскажите как заменить строку в одном массиве на строку в другом массиве?

Тема в разделе "PHP для новичков", создана пользователем Artur_hopf, 19 ноя 2018.

  1. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Добрый день. Есть два массива вида:
    PHP:
    1. //первый массив
    2.   [0]=>
    3.   array {
    4.     ["name"]=>
    5.     string"name1"
    6.     ["test"]=>
    7.     string "В работе"
    8.   }
    9.  
    10. //второй массив
    11.   [0]=>
    12.   array {
    13.     ["name"]=>
    14.     string"name1"
    15.     ["test"]=>
    16.     string "не в работе"
    17.   }
    Вопрос. Как обработать первый массив чтобы вставить в объект 'test' содержимое из 2го массива. если у них одинаковый объект 'name' ?

    Напишу как я это вижу, но никак не могу реализовать:
    PHP:
    1. $array1;
    2. $array2;
    3. $array[] = $array1;
    4. $array[] = $array2;
    5. foreach ($array as $item){
    6.       foreach ($item as $k => $v){
    7.         if($item[$k]['name'] ==  $item[$k]['name']){
    8.                $item[$k]['test'] = $item[$k]['test'];
    9.         }
    10.       }
    11. }
    Помогите пожалуйста написать правильно, голова не варит =(
     
    #1 Artur_hopf, 19 ноя 2018
    Последнее редактирование: 19 ноя 2018
  2. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Написал так, работает:
    PHP:
    1. $array1;
    2. $array2;
    3. for($i = 0; $i < count($array2); ++$i) {
    4.     if($array2[$i]['name'] === $array1[$i]['name']){
    5.        $array2[$i]['eam'] = $array1[$i]['eam'];
    6.      }
    7. }
    Но если у меня вдруг в массиве имена поменяются местами, то это работать не будет. Подскажите как правильно написать =(
     
  3. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    PHP:
    1. $a = [
    2.     'name' => 'name1',
    3.     'test' => 'В работе'
    4. ];
    5.  
    6. $b = [
    7.     'name' => 'name1',
    8.     'test' => 'не в работе'
    9. ];
    10.  
    11. $a = $b + $a;
    12.  
    Код (Text):
    1. Array
    2. (
    3.     [name] => name1
    4.     [test] => не в работе
    5. )
    https://bolknote.ru/all/4389/
     
    #3 pr0n1x, 19 ноя 2018
    Последнее редактирование: 19 ноя 2018
  4. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @pr0n1x так не годится, массивы не одинаковые, там просто есть идентичные имена объекта
    PHP:
    1. $a = [
    2.     'name' => 'name1',
    3.     'test' => 'В работе'
    4. ];
    5.  
    6. $b = [
    7.     'name' => 'name1',
    8.     'test' => 'не в работе'
    9.     'atr' => 'еще что то'
    10. ];
    11.  
    12. $a = $b + $a;
    PHP:
    1. Message: Undefined index: atr
     
  5. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Все работает, ты запятые правильно расставляй или пользуйся IDE, которая ошибки синтаксические показывает, проверь этот код

    PHP:
    1. $a = [
    2.     'name' => 'name1',
    3.     'test' => 'В работе'
    4. ];
    5.  
    6. $b = [
    7.     'name' => 'name1',
    8.     'test' => 'не в работе',
    9.     'atr' => 'еще что то'
    10. ];
    11.  
    12. $a = $b + $a;
    13.  
    14. print_r($a);
     
  6. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Начинать надо всегда с информации о том откуда получен этот массив.
     
  7. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    С базы берутся, ладно оставлю как есть пока что. Спасибо за помощь :)
     
  8. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Не "с базы", а из базы. Из базы надо брать ровно столько сколько нужно, а не лепить костыли на php.
    P.S. я понимаю на форуме полно не русских, но всё равно бесит "с базы"
     
    #8 Valick, 19 ноя 2018
    Последнее редактирование: 19 ноя 2018
  9. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @Valick Пришлось лепить костыль, сервер переезжает =) как переедет вся база, верну как было)
     
  10. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Базу столь фурами за МКАД вывозят? :)
     
  11. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Частично переезжает, ну вот смотри, есть две хоста на которых крутятся sql сервер, дергаем их в массив:
    PHP:
    1. $db['serv1'] = array(
    2.     'dsn'    => '',
    3.     'hostname' => 'serv1',
    4.     'username' => 'username',
    5.     'password' => 'password',
    6.     'database' => 'database',
    7.     'dbdriver' => 'sqlsrv',
    8.     'dbprefix' => '',
    9.     'pconnect' => FALSE,
    10.     'db_debug' => (ENVIRONMENT !== 'production'),
    11.     'cache_on' => FALSE,
    12.     'cachedir' => '',
    13.     'char_set' => 'utf8',
    14.     'dbcollat' => 'utf8_general_ci',
    15.     'swap_pre' => '',
    16.     'encrypt' => FALSE,
    17.     'compress' => FALSE,
    18.     'stricton' => FALSE,
    19.     'failover' => array(),
    20.     'save_queries' => TRUE
    21. );
    22.  
    23. $db['serv2'] = array(
    24.     'dsn'    => '',
    25.     'hostname' => 'serv2',
    26.     'username' => 'username',
    27.     'password' => 'password',
    28.     'database' => 'database',
    29.     'dbdriver' => 'sqlsrv',
    30.     'dbprefix' => '',
    31.     'pconnect' => FALSE,
    32.     'db_debug' => (ENVIRONMENT !== 'production'),
    33.     'cache_on' => FALSE,
    34.     'cachedir' => '',
    35.     'char_set' => 'utf8',
    36.     'dbcollat' => 'utf8_general_ci',
    37.     'swap_pre' => '',
    38.     'encrypt' => FALSE,
    39.     'compress' => FALSE,
    40.     'stricton' => FALSE,
    41.     'failover' => array(),
    42.     'save_queries' => TRUE
    43. );
    Теперь вынужден делать два запроса и соединять их средствами рнр.
    Нельзя написать вот так например, выдаст ошибку:
    PHP:
    1. $db = $this->load->database('serv1', TRUE);
    2. $db2 = $this->load->database('serv2', TRUE);
    3. $db->select('RO.Наименование AS name, TS.Наименование AS test');
    4. $db->join("table1 RO", 'RO.id = RF.test2', 'left');
    5. $db2->join('table2 TS', 'TS.id = RO.test3', 'left');
    6. $db->group_by('RO.Наименование, TS.Наименование');
    7. $db->order_by('name', 'ASC');
    8. $query = $db->get('table4 RF');
    Выдаст ошибку, надо тянуть и с первого сервера и со второго, и соединить, соединил в итоге так:
    PHP:
    1. $test1 =$this->base1();
    2. $test2 = $this->base2();
    3.  
    4. for($i = 0; $i < count($test2); ++$i) {
    5.     if($test2[$i]['name'] === $test1[$i]['name']){
    6.         $test2[$i]['test'] = $test1[$i]['test'];
    7.      }
    8. }
    9.  
    10. return $test2;