Как убрать из массива лишние элементы?

12
Samail
На сайте с 10.05.2007
Offline
369
974

Массив такого типа:

{

"1": {
"price": 25,
"title_en": "Name",
},
"2": {
"price": 32,
"title_en": "Name",
},
"3": {
"price": 25,
"title_en": "Name",
},
"4": {
"price": 17,
"title_en": "Name",
},
"4": {
"price": 25,
"title_en": "Name",
},
"5": {
"price": 85,
"title_en": "Name",
},
}

Как из него сделать новый массив, в котором будут только только объекты с ценой 25, что-бы получилось так:

{

"1": {
"price": 25,
"title_en": "Name",
},
"3": {
"price": 25,
"title_en": "Name",
},
"5": {
"price": 25,
"title_en": "Name",
},
}
SeVlad
На сайте с 03.11.2008
Offline
1609
#1

Это в одном текст файле?

В любой нормальном блокноте в 2-3 прохода.

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

2. Удаление строк, не содержащих "price": 25 (регулярки и/или предустановленные скрипты/макросы)

3. Если нужно - восстановление переносов.

Можно, конечно, и скриптом (ща кто-нить наверняка подгонит), но ИМХО лучше освоить подобные телодвижения и инструменты, чем каждый раз кодить.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
Samail
На сайте с 10.05.2007
Offline
369
#2

В самом файле менять его не нужно. Нужно что-бы php скрипт делал из большого массива маленький и дальше работал с маленьким, там foreach раз 20 перезапускается. Хочется время выполнения скрипта уменьшить. А "price": 25 это для примера, там и 10 и 50 может быть.

[Удален]
#3


$array1 = json_decode('[
{ "price": 25, "title_en": "Name" },
{ "price": 32, "title_en": "Name" },
{ "price": 25, "title_en": "Name" },
{ "price": 17, "title_en": "Name" },
{ "price": 25, "title_en": "Name" },
{ "price": 85, "title_en": "Name" }
]', true);

print_r(array_filter($array1, function($el){ return $el['price']==25; }));

Samail
На сайте с 10.05.2007
Offline
369
#4
imagine:
print_r(array_filter($array1, function($el){ return $el['price']==25; }));

Parse error: syntax error, unexpected T_FUNCTION

[Удален]
#5
Samail:
Parse error: syntax error, unexpected T_FUNCTION

Что-то у вас с синтаксисом не так, попробуйте отдельно:

http://pastebin.com/7VUZ5gcN

L
На сайте с 07.12.2007
Offline
351
#6
Samail:
Parse error: syntax error, unexpected T_FUNCTION

Похоже ваша версия PHP не поддерживает анонимные lamda-функции. Просто вынесите описание функции из fllter_array() вверх и задайте ей имя:

$array1 = json_decode('[
{ "price": 25, "title_en": "Name" },
{ "price": 32, "title_en": "Name" },
{ "price": 25, "title_en": "Name" },
{ "price": 17, "title_en": "Name" },
{ "price": 25, "title_en": "Name" },
{ "price": 85, "title_en": "Name" }
]', true);

function Price($el) { return $el['price']==25; };

print_r(array_filter($array1, "Price"));
[Удален]
#7

Видимо вот:


К сожалению, если используется старая версия PHP, вы получите сообщение об ошибке, вида: Parse error: syntax error, unexpected T_FUNCTION in … on line X

http://wmas.msk.ru/archives/php-anonymous-function

Samail
На сайте с 10.05.2007
Offline
369
#8

Так вот сам этот код и выдаёт ошибку.

[Удален]
#9
Samail:
Так вот сам этот код и выдаёт ошибку.

Старая версия вроде выяснили, тогда да, либо вы выносите анонимную функцию наружу, либо по старинке пробегаем по массиву и удаляем элементы / создаем новый массив. Анонимные функции появились в 5.3.0, сейчас уже 5.6, зачем такой старый PHP ?

Samail
На сайте с 10.05.2007
Offline
369
#10
imagine:
зачем такой старый PHP ?

Среди сайтов есть сделанные на древних cms которые с новым PHP работать не хотят.

А как вместо числа вставить переменную?


$price2=25;
function Price($el) { return $el['price']==$price2; };

Так не работает, а с числом работает.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий