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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как седелать выборку из двумерного массива по ключам

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Сергей Ш.
Отправлено: 11 Ноября, 2016 - 12:54:04
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




у меня есть двумерный массив:
Array
(
[0] => Array
(
[optA] => 10
[optB] => 1
[QA] => 5
[Qsmin] => 5
)

[1] => Array
(
[optA] => 10
[optB] => 1
[QA] => 10
[Qsmin] => 5
)

[2] => Array
(
[optA] => 10
[optB] => 2
[QA] => 20
[Qsmin] => 5
)

[3] => Array
(
[optA] => 10
[optB] => 2
[QA] => 30
[Qsmin] => 5
)

[4] => Array
(
[optA] => 40
[optB] => 1
[QA] => 40
[Qsmin] => 5
)

[5] => Array
(
[optA] => 40
[optB] => 1
[QA] => 60
[Qsmin] => 5
)

[6] => Array
(
[optA] => 40
[optB] => 2
[QA] => 80
[Qsmin] => 5
)

[7] => Array
(
[optA] => 40
[optB] => 2
[QA] => 100
[Qsmin] => 5
)
...
)

подскажите как выбрать из этого массива данные и поместить их в ондномерный массив, например для ключей optA =10 и optB =1, у меня даные по ключу optA помещаются в разные таблицы, а optВ строки в этих таблицах.
 
 Top
Prizma
Отправлено: 11 Ноября, 2016 - 13:58:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




1. Можно сначало отобрать нужные значения array_filter
2. А потом создать 2 твоих массива с помощью array_column
Например вот так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $array = [...];
  3. $filterArray = array_filter($array, function($el) {
  4.         return ($el['optA'] == 10) && ($el['optB'] == 1);
  5. });
  6. $optA = array_column($filterArray, 'optA');
  7. $optB = array_column($filterArray, 'optB');
  8.  
 
My status
 Top
Сергей Ш.
Отправлено: 11 Ноября, 2016 - 14:15:43
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




Prizma пишет:
1. Можно сначало отобрать нужные значения array_filter
2. А потом создать 2 твоих массива с помощью array_column
Например вот так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $array = [...];
  3. $filterArray = array_filter($array, function($el) {
  4.         return ($el['optA'] == 10) && ($el['optB'] == 1);
  5. });
  6. $optA = array_column($filterArray, 'optA');
  7. $optB = array_column($filterArray, 'optB');
  8.  


Спасибо! Вот эта часть подошла:
$filterArray = array_filter($array, function($el) {
return ($el['optA'] == 10) && ($el['optB'] == 1);
});
(Добавление)
Подскжите еще как в условие фильтра:

$el['optA'] == 10) && ($el['optB'] == 1

вместо 10 и 1 передать переменные объявленные за пределами фильтра или это нельзя сделать? Я попытался передать переменные, которые инициализирую выше и получаю сообщение об ошибке, что в условии они не инициалицированны.
 
 Top
Prizma
Отправлено: 11 Ноября, 2016 - 15:18:48
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




Сергей Ш. пишет:
вместо 10 и 1 передать переменные объявленные за пределами фильтра или это нельзя сделать? Я попытался передать переменные, которые инициализирую выше и получаю сообщение об ошибке, что в условии они не инициалицированны.

вот так
PHP:
скопировать код в буфер обмена
  1. $filterArray = array_filter($array, function($el) use($a, $b) {
  2.         return ($el['optA'] == $a) && ($el['optB'] == $b);
  3. });
 
My status
 Top
Сергей Ш.
Отправлено: 11 Ноября, 2016 - 15:27:11
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




Prizma пишет:
Сергей Ш. пишет:
вместо 10 и 1 передать переменные объявленные за пределами фильтра или это нельзя сделать? Я попытался передать переменные, которые инициализирую выше и получаю сообщение об ошибке, что в условии они не инициалицированны.

вот так
PHP:
скопировать код в буфер обмена
  1. $filterArray = array_filter($array, function($el) use($a, $b) {
  2.         return ($el['optA'] == $a) && ($el['optB'] == $b);
  3. });


Спасибо Вам еще раз за бытрый ответ!
(Добавление)
Prizma пишет:
Сергей Ш. пишет:
вместо 10 и 1 передать переменные объявленные за пределами фильтра или это нельзя сделать? Я попытался передать переменные, которые инициализирую выше и получаю сообщение об ошибке, что в условии они не инициалицированны.

вот так
PHP:
скопировать код в буфер обмена
  1. $filterArray = array_filter($array, function($el) use($a, $b) {
  2.         return ($el['optA'] == $a) && ($el['optB'] == $b);
  3. });


а если при задании условий отбора, функция ничего не возвращает, как это определить, потому что у меня в NetBeans пишет array[0], проверял isset(), но она показывает что значение установленно
 
 Top
Prizma
Отправлено: 12 Ноября, 2016 - 02:14:47
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




Сергей Ш. пишет:
а если при задании условий отбора, функция ничего не возвращает, как это определить, потому что у меня в NetBeans пишет array[0], проверял isset(), но она показывает что значение установленно

var_dump $array, $a и $b сделай, там все ответы, где то чего-то не совпадает по условию.

И возвращать ничего не может, скорее всего возвращает пустой массив, а это значит, что callback-функция не разу не вернула true, значит ошибка либо в условии, либо в переданном массиве.

Проверь может в условии ключи неправильно указал (регистр важен) или значения передаются некорректные.
 
My status
 Top
Сергей Ш.
Отправлено: 12 Ноября, 2016 - 09:18:41
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




Prizma пишет:
Сергей Ш. пишет:
а если при задании условий отбора, функция ничего не возвращает, как это определить, потому что у меня в NetBeans пишет array[0], проверял isset(), но она показывает что значение установленно

var_dump $array, $a и $b сделай, там все ответы, где то чего-то не совпадает по условию.

И возвращать ничего не может, скорее всего возвращает пустой массив, а это значит, что callback-функция не разу не вернула true, значит ошибка либо в условии, либо в переданном массиве.

Проверь может в условии ключи неправильно указал (регистр важен) или значения передаются некорректные.


мне как раз и надо чтобы фильтр ничего не возвращал, тогда я не заполняю тэги <td>, когда возвращает, тогда заполняю, а нашел как отлавливать это функцией count, но только так как у меня опыт в этой сфере маленький, возникает много вопросов. Если у меня фильтр возвращает значения то я пишу <td>arr['key']</td>, а если ничего не возвращается то <td></td>, и в браузере выскакивает сообщение что я пытаюсь использовать не инициализированную переменную, вот этот момент мне не понятен, или нельзя выводить пустую ячейку?
(Добавление)
Сергей Ш. пишет:
Prizma пишет:
Сергей Ш. пишет:
а если при задании условий отбора, функция ничего не возвращает, как это определить, потому что у меня в NetBeans пишет array[0], проверял isset(), но она показывает что значение установленно

var_dump $array, $a и $b сделай, там все ответы, где то чего-то не совпадает по условию.

И возвращать ничего не может, скорее всего возвращает пустой массив, а это значит, что callback-функция не разу не вернула true, значит ошибка либо в условии, либо в переданном массиве.

Проверь может в условии ключи неправильно указал (регистр важен) или значения передаются некорректные.


мне как раз и надо чтобы фильтр ничего не возвращал, тогда я не заполняю тэги <td>, когда возвращает, тогда заполняю, а нашел как отлавливать это функцией count, но только так как у меня опыт в этой сфере маленький, возникает много вопросов. Если у меня фильтр возвращает значения то я пишу <td>arr['key']</td>, а если ничего не возвращается то <td></td>, и в браузере выскакивает сообщение что я пытаюсь использовать не инициализированную переменную, вот этот момент мне не понятен, или нельзя выводить пустую ячейку?


вот код:

// Заполняем последующие столбцы
foreach ($arrQA as $QA) {
$el = array_filter($filterArray, function($el) use($p, $L, $QA) {
return ($el['Innendruck'] == $p) && ($el['Dichtheitsklasse'] == $L) && ($el['QA'] == $QA);
});
if (count($el) > 0) {
echo "<td>{$el['Qsmin']}</td>";
} else {
echo "<td></td>";
}
$el = null;
}

а потом в браузере выдается следующее:
Notice: Undefined index: Qsmin in C:\xampp\htdocs\odbc_connect\gasket_info.php on line 148

строка 148 это:
echo "<td>{$el['Qsmin']}</td>";

var_dump($el); на месте этой строки выдает следкющее:
array (size=1)
0 =>
array (size=4)
'Innendruck' => string '10' (length=2)
'Dichtheitsklasse' => string '1' (length=1)
'QA' => string '10' (length=2)
'Qsmin' => string '5' (length=1)

или вот это обращение ($el['Qsmin']) не верно?
 
 Top
Сергей Ш.
Отправлено: 12 Ноября, 2016 - 21:33:21
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




Prizma пишет:
Сергей Ш. пишет:
а если при задании условий отбора, функция ничего не возвращает, как это определить, потому что у меня в NetBeans пишет array[0], проверял isset(), но она показывает что значение установленно

var_dump $array, $a и $b сделай, там все ответы, где то чего-то не совпадает по условию.

И возвращать ничего не может, скорее всего возвращает пустой массив, а это значит, что callback-функция не разу не вернула true, значит ошибка либо в условии, либо в переданном массиве.

Проверь может в условии ключи неправильно указал (регистр важен) или значения передаются некорректные.



Спасибо за помощь, со всем разобрался, все проблемы решил!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB