Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
trest
0 / 0 / 0
Регистрация: 25.06.2011
Сообщений: 100
1

Извлечь с удалением из массива подмассив

08.02.2017, 15:20. Просмотров 504. Ответов 16
Метки нет (Все метки)

приветствую
есть код
PHP
1
2
3
4
5
for ($i = 1; $i <= 3; $i++) {
$trnd[]=$opnnn[$i];
$opnnn=array_diff($opnnn,$trnd); 
}
print_r($trnd);
так все работает, но решил написать функцию

PHP
1
2
3
4
5
6
7
function amount($value_1, $value_2) { 
for ($i = $value_1; $i <= $value_2; $i++) {
$trnd[]=$opnnn[$i];
$opnnn=array_diff($opnnn,$trnd); 
}
return $trnd;
    }
вызываю print_r(amount(1,3)); получаю ошибку array_diff(): Argument #1 is not an array
подскажите почему? и как исправить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2017, 15:20
Ответы с готовыми решениями:

Вывести подмассив из массива по ключу
Добрый день, коллеги. помогите с простой задачей, заблудилась в функциях php....

Как извлечь данные из массива $_REQUEST?
Добрый вечер! &lt;form action=&quot;handlef.php&quot; method=&quot;post&quot;&gt; Номер станции &lt;input...

Подскажите как извлечь данные из JSON массива?
&lt;html&gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;...

Извлечь последний элемент массива, не зная индекса
у меня есть массив, с числовыми индексами, которые идут не по порядку и не...

Максимальный подмассив, выдает ошибку!
Вроде написал скрипт нахождения максимального подмассива в массиве но не...

16
Пифагор
Модератор
1196 / 996 / 520
Регистрация: 10.01.2015
Сообщений: 3,352
08.02.2017, 15:30 2
Насколько я вижу код, $opnnn - массив (надеюсь, что массив) из глобальной области видимости, а у функции область видимость локальная. Передайте $opnnn в функцию 3им аргументом.
Например, так (если нигде не ошибся):
PHP
1
2
3
4
5
6
7
8
function amount($value_1, $value_2, $arr){ 
  for ($i = $value_1; $i <= $value_2; $i++) {
    $trnd[] = $arr[$i];
    $arr = array_diff($arr,$trnd);
  }
  return $trnd;
}
print_r(amount(1, 3, $opnnn));
1
Deno95
9 / 9 / 10
Регистрация: 16.12.2013
Сообщений: 108
08.02.2017, 15:37 3
У вас не инициализирован массив $opnnn.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16751 / 6642 / 864
Регистрация: 12.06.2012
Сообщений: 19,896
Завершенные тесты: 1
08.02.2017, 16:40 4
Цитата Сообщение от Пифагор Посмотреть сообщение
Очевидно, массив уже существует.
это было бы очевидно, если бы он использовался в глобальной области видимости. Однако внутри функции никаких global не видно.

Не туда глянул, sorry)
0
Пифагор
Модератор
1196 / 996 / 520
Регистрация: 10.01.2015
Сообщений: 3,352
08.02.2017, 16:43 5
Цитата Сообщение от Deno95 Посмотреть сообщение
У вас не инициализирован массив $opnnn.
С этим массивом ТС работает без функции. Очевидно, массив уже существует.

Добавлено через 47 секунд
Добавлено через 1 час 0 минут
Цитата Сообщение от KOPOJI Посмотреть сообщение
это было бы очевидно, если бы он использовался в глобальной области видимости.
Так я и говорю, что
Цитата Сообщение от Пифагор Посмотреть сообщение
С этим массивом ТС работает без функции.
Извлечь с удалением из массива подмассив

Добавлено через 31 секунду
Цитата Сообщение от KOPOJI Посмотреть сообщение
Не туда глянул, sorry)
Добро
1
trest
0 / 0 / 0
Регистрация: 25.06.2011
Сообщений: 100
08.02.2017, 16:59  [ТС] 6
Цитата Сообщение от Пифагор Посмотреть сообщение
Насколько я вижу код, $opnnn - массив (надеюсь, что массив) из глобальной области видимости, а у функции область видимость локальная. Передайте $opnnn в функцию 3им аргументом.
да вы правы $opnnn это массив и он уже существует.
спасибо!

еще вопрос - как видно я беру из массива какое-то количество ячеек и потом удаляю.
так вот вопрос если вдруг массив закончится а я буду вызывать функцию то вывалится ошибка или просто пустое значение будет?
0
Пифагор
Модератор
1196 / 996 / 520
Регистрация: 10.01.2015
Сообщений: 3,352
08.02.2017, 17:12 7
Цитата Сообщение от trest Посмотреть сообщение
если вдруг массив закончится а я буду вызывать функцию то вывалится ошибка или просто пустое значение будет?
Укажите в условии цикла
PHP
1
for ($i = $value_1; $i <= count($arr); $i++)
и цикл завершится при достижении значения количества элементов массива.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16751 / 6642 / 864
Регистрация: 12.06.2012
Сообщений: 19,896
Завершенные тесты: 1
08.02.2017, 17:29 8
Цитата Сообщение от Пифагор Посмотреть сообщение
Укажите в условии цикла
а вот так лучше не писать. Лучше так тогда
PHP
1
for ($i = $value_1, $end = count($arr); $i <= $end; $i++)
и точно <= надо, а не < ?
0
trest
0 / 0 / 0
Регистрация: 25.06.2011
Сообщений: 100
14.02.2017, 07:01  [ТС] 9
Цитата Сообщение от KOPOJI Посмотреть сообщение
for ($i = $value_1, $end = count($arr); $i <= $end; $i++)
а так разве не будет выводить все ячейки массива? мне надо чтобы выводил заданное мной количество.

проверил код выполнения функции три раза подряд и получил три одинаковые результаты.
подскажите а как сделать так, чтобы каждый вызов функции выдавал разные результаты?
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
14.02.2017, 09:42 10
trest, мне одному кажется, что всё уже до вас написано? array_splice(), либо array_slice() в зависимости от задачи.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16751 / 6642 / 864
Регистрация: 12.06.2012
Сообщений: 19,896
Завершенные тесты: 1
14.02.2017, 09:51 11
Цитата Сообщение от trest Посмотреть сообщение
а так разве не будет выводить все ячейки массива?
я просто поправил код, написанный выше. И то, все ли значения будет выводить, зависит от значения $value_1
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
14.02.2017, 10:05 12
trest, объясните, что должна делать функция.
0
trest
0 / 0 / 0
Регистрация: 25.06.2011
Сообщений: 100
14.02.2017, 10:21  [ТС] 13
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
мне одному кажется, что всё уже до вас написано? array_splice(), либо array_slice() в зависимости от задачи.
к сожалению пока не могу проверить, но спасибо за информацию

Цитата Сообщение от Kerry_Jr Посмотреть сообщение
объясните, что должна делать функция.
у мня есть массив в нем в каждой ячейке предложения.
мне надо функцию чтобы выбиралось мною определенное количество ячеек.
те что были выбраны должны удаляться, чтобы не было повторов

т.е. на странице хочу вызывать функцию несколько раз и в разных местах и получать разные ячейки массива.
надеюсь понятно изложил)
0
PantiL
26 / 26 / 10
Регистрация: 10.03.2016
Сообщений: 73
14.02.2017, 10:34 14
trest, вам полностью подойдет стандартная функция array_splice array_splice
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
14.02.2017, 10:35 15
Цитата Сообщение от trest Посмотреть сообщение
мне надо функцию чтобы выбиралось мною определенное количество ячеек.
те что были выбраны должны удаляться, чтобы не было повторов
Значит, я правильно понял и вам нужна функция array_splice().
1
PantiL
26 / 26 / 10
Регистрация: 10.03.2016
Сообщений: 73
14.02.2017, 10:38 16
trest,
PHP
1
2
3
4
5
6
7
8
9
10
<?php
//Исходный массив со строками
$arrStrings         = ["предложение1", "предложение2", "предложение3", "предложение4"];
//Например нам надо первые две строки
$arrStringsForPrint = array_splice($arrStrings, 0, 2);
//Смотрим что осталось, видим что строки были удалены из исходного массива
var_dump($arrStrings);
//И видим что получили первые две строки
var_dump($arrStringsForPrint);
?>
У php настолько богат набор функций, особенно для работы с массивами, что в первую очередь всегда стоит искать среди готового.
1
trest
0 / 0 / 0
Регистрация: 25.06.2011
Сообщений: 100
14.02.2017, 10:43  [ТС] 17
Спасибо всем кто ответил)
Вечером буду пробовать.
Я только начинаю по этому часто изобретаю заново велосипед(((

Еще раз спасибо!
0
14.02.2017, 10:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2017, 10:43

проблемка с удалением
есть статья ссылка на ее удаление такая &lt;a...

Подмассив массива
Пусть задан массив целых чисел a1 , a2 , . . . , an . Назовем его подмассивом...

Подмассив массива
Ребят, помогите с теорией. Решаю очередную задачку на сайте ********. Что такое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru