PHP-массив поиска и добавление контента в позиции, где идентификаторы равны - PullRequest
1 голос
/ 23 января 2010

у меня 2 доц. Массивы, имеющие одинаковую структуру, но идентифицирующие только один идентификатор. Мне нужно добавлять содержимое в MainArray из IncludeArray каждый раз, когда конкретный идентификатор идентичен.

Вот пример массива (MainArray может содержать до 100 или более элементов, образец содержит только часть реального содержимого):

$MainArray = Array
 (
   [0] => Array
      (
        [item_id] => 1
        [name] => Test1
        [helptxt] => Helptext for item-id 1.
        [type_id] => 1      #could be the same for many other items!!
      )
   [1] => Array
      (
        [item_id] => 2
        [name] => Test2
        [helptxt] => Helptext for item-id 2.
        [type_id] => 2      #could be the same for many other items!!
      )
   and a lot more Arrays
 )


$IncludeArray = Array
(
  [0] => Array
      (
        [type_id] => 1
        [typetitle] => Number
        [typedesc] => Description Text type_id 1
      )
  [1] => Array
      (
        [type_id] => 2
        [typetitle] => Value
        [typedesc] => Description Text type_id 2
      )
 )

Нужный новый массив должен быть:

 $NewMainArray = Array
 (
   [0] => Array
      (
        [item_id] => 1
        [name] => Test
        [helptxt] => Helptext for item-id 1.
        [type_id] => 1
        [typetitle] => Number
        [typedesc] => Description Text type_id 1
      )
   [1] => Array
      (
        [item_id] => 2
        [name] => Test2
        [helptxt] => Helptext for item-id 2.
        [type_id] => 2
        [typetitle] => Value
        [typedesc] => Description Text type_id 2
      )
    And so on with all other items in the Array.
 )

Таким образом, каждый раз, когда type_id находится в $ MainArray, содержимое [typetitle] + [typedesc] должно добавляться в $ NewMainArray.

Большинство моих тестов заканчивались объединением массивов или добавлением $ IncludeArray только один раз. Даже мои поиски по форуму не привели меня к решению.

Массивы создаются из 2 отдельных запросов к базе данных, к которым я не смог присоединиться (уже пробовал несколько попыток). Это связано с различными предложениями WHERE и AND, которые не работают для объединенного запроса.

Я надеюсь, что есть разумный способ получить желаемый $ NewMainArray. Кстати, я использую PHP4, и я новичок в PHP (по крайней мере, для такого рода проблем).

Большое спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 23 января 2010

Попробуйте это:


/**
 * Simulates relational table behaviour by joining data matching an ID value.
 * Works with single-nested arrays.
 *
 * @author Joel A. Villarreal Bertoldi
 *
 * @param  $source           array     The source array.
 * @param  $include_to_row   array     The row where we'll deposit the joined data.
 * @param  $match            string    Unique id field name.
 * 
 * @return array             Row with joined data.
 */

function includeFromArray($source, $include_to_row, $match)
{
  foreach ($source as $source_row)
  {
    if ($source_row[$match] == $include_to_row[$match])
    {
      foreach ($source_row as $source_column_key => $source_column_value)
      {
        $include_to_row[$source_column_key] = $source_column_value;
      }
    }
  }
  return $include_to_row;
}

for ($ma = 0; $ma < count($MainArray); $ma++)
  $NewMainArray[$ma] = includeFromArray($IncludeArray, $MainArray[$ma], "type_id");

Результаты:


Array
(
    [0] => Array
        (
            [item_id] => 1
            [name] => Test1
            [helptxt] => Helptext for item-id 1.
            [type_id] => 1
            [typetitle] => Number
            [typedesc] => Description Text type_id 1
        )</p>

<pre><code>[1] => Array
    (
        [item_id] => 2
        [name] => Test2
        [helptxt] => Helptext for item-id 2.
        [type_id] => 2
        [typetitle] => Value
        [typedesc] => Description Text type_id 2
    )

)

0 голосов
/ 23 января 2010

Посмотрите на функцию array_merge_recursive;)

http://nl2.php.net/manual/en/function.array-merge-recursive.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...