#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, спасибо 😉 Это не самое элегантное редактирование кода, но оно помогло бы изменить вывод ошибок, чтобы быть более полезным в отношении того, что не является массивом.