объединение массива в другой массив

#php #arrays

#php #массивы

Вопрос:

Я пытался управлять массивами, но почему-то у меня не получается заставить это работать.

Вот моя проблема: у меня есть один массив с продуктом, например :

     array (size=2)
  'count' => string '1' (length=1)
  'records' => 
    array (size=5)
      'care_Id' => string '11938' (length=5)
      'productName' => string 'The name of the product blabla' (length=35)
      'productPrice' => string '98.00' (length=5)
      'beginAt' => string '2010-09-17 09:00:00' (length=19)
      'endAt' => string '2010-09-27 23:59:00' (length=19)
 

и еще один массив с ассоциативной информацией о продукте, например :

 array (size=5)
  'sellQuantity' => string '22' (length=2)
  'validatedQuantity' => string '22' (length=2)
  'lostQuantity' => string '0' (length=1)
  'remainQuantity' => string '0' (length=1)
  'turnover' => string '2177.00' (length=7)
 

То, что я хочу сделать, приведет к следующему :

     array (size=2)
  'count' => string '1' (length=1)
  'records' => 
    array (size=5)
      'care_Id' => string '11938' (length=5)
      'productName' => string 'Journée Semaine Luxe et Bien-être' (length=35)
      'productPrice' => string '98.00' (length=5)
      'beginAt' => string '2010-09-17 09:00:00' (length=19)
      'endAt' => string '2010-09-27 23:59:00' (length=19)
      'sellQuantity' => string '22' (length=2)
      'validatedQuantity' => string '22' (length=2)
      'lostQuantity' => string '0' (length=1)
      'remainQuantity' => string '0' (length=1)
      'turnover' => string '2177.00' (length=7)
 

Но мне не удается это сделать. Я пробовал это :

 $aTest = array_merge($aCares[$i]['records'], $aCaresInfo[$i]);
 

Вот цикл, который я использую :

 for($i=0;$i<count($aInSaleCares);$i  )
{
    $aFilter['careId'] = $aInSaleCares[$i]['careId'];
    $aCares[] = sthORM::get('Sales')->getInSaleCares($iOffset, $iLimit, array(), $aFilter);
    $aCaresInfo[] = sthORM::get('Sales')->getCaresInfo($aFilter);
    $aTest = array_merge($aCares[$i]['records'], $aCaresInfo[$i]);
}
 

Но когда я var_dump $ATest, это вызывает действительно странную ошибку :

 Warning: array_merge(): Argument #1 is not an array in
 

Но var_dump(is_array($aCares[$i]['records'])) возвращает true ?

Итак, мой вопрос: как я могу получить именно тот результат, который мне нужен?


Редактировать :


я тоже пробовал это :

  $aTest[] = $aCares[$i]['records']   $aCaresInfo[$i]; // inside of the loop
 

но когда я печатаю его вне цикла, он возвращает фатальную ошибку php :

 Unsupported operand types
 

находясь внутри цикла, я правильно получаю данные, подобные этому :

 array (size=10)
  'care_Id' => string '11938' (length=5)
  'productName' => string 'Journée Semaine Luxe et Bien-être' (length=35)
  'productPrice' => string '98.00' (length=5)
  'beginAt' => string '2010-09-17 09:00:00' (length=19)
  'endAt' => string '2010-09-27 23:59:00' (length=19)
  'sellQuantity' => string '22' (length=2)
  'validatedQuantity' => string '22' (length=2)
  'lostQuantity' => string '0' (length=1)
  'remainQuantity' => string '0' (length=1)
  'turnover' => string '2177.00' (length=7)
 

Комментарии:

1. Пожалуйста, опубликуйте свой for цикл, в котором это $i повторяется.

2. Конечно, если ошибка говорит, что это не массив, это не массив 🙂 кстати, вместо array_merge() того, чтобы вы могли бы использовать $aTest = $aCares[$i]['records'] $aCaresInfo[$i];

3. спасибо @Jack, но он возвращает: неподдерживаемые типы операндов, когда я печатаю $ATest вне цикла. но когда я печатаю его внутри, все работает отлично

4. Потому что вне цикла значение $i не определено; это помогает error_reporting(-1); отображать все предупреждения в верхней части вашего скрипта.

5. @Jack но тогда, что мне нужно сделать, чтобы повторно использовать массив вне цикла, например, если я хочу его распечатать? loop() { $ATest[] = $aCares[$i][‘records’] $aCaresInfo[$i]; var_dump($ATest); // работает отлично } var_dump($ATest); // фатальная ошибка

Ответ №1:

Существует ли $ATest вне цикла? Вы помещаете содержимое $ATest во что-то другое вне цикла и просто не включаете его в свой пример?

 $stuff = array();
for($i=0;$i<count($aInSaleCares);$i  )
{
    $aFilter['careId'] = $aInSaleCares[$i]['careId'];
    $aCares[] = sthORM::get('Sales')->getInSaleCares($iOffset, $iLimit, array(), $aFilter);
    $aCaresInfo[] = sthORM::get('Sales')->getCaresInfo($aFilter);
    $aTest = array_merge($aCares[$i]['records'], $aCaresInfo[$i]);
    $stuff[] = $aTest;
}

var_dump($stuff);
 

Когда все остальное терпит неудачу, вы также можете попробовать:

 for($i=0;$i<count($aInSaleCares);$i  )
{
    $tmp = array();
    $aFilter['careId'] = $aInSaleCares[$i]['careId'];
    $aCares[] = sthORM::get('Sales')->getInSaleCares($iOffset, $iLimit, array(), $aFilter);
    $aCaresInfo[] = sthORM::get('Sales')->getCaresInfo($aFilter);

    $tmp = $aCares[$i]['records'];
    $tmp = array_merge($tmp, $aCaresInfo[$i]);

    // overwrite the existing contents of 'records'
    $aCares[$i]['records'] = $tmp;

}
 

Комментарии:

1. даже если я уже решил проблему, ваш ответ правильный, и он единственный, поэтому я приму его, поскольку он может помочь другим. Спасибо.

2. lol, спасибо 😉 Это не самое элегантное редактирование кода, но оно помогло бы изменить вывод ошибок, чтобы быть более полезным в отношении того, что не является массивом.