Я новичок в PHP. Мне нужно отфильтровать ответ сервера, чтобы повысить производительность. У меня есть полезная нагрузка, разделенная символом канала и нарезанная, чтобы получить только те данные, которые мне нужны:
$alllogsplitted = explode("|",$row['PAYLOAD']);
print_r(array_slice($alllogsplitted, 23, 22));
Данные в каждой позиции имеют одинаковую структуру, например: A1;0;0 означает: type;firstvalue;secondvalue. Теперь я хочу получить только данные, если firstvalue отличен от нуля. Фактический ответ:
Array
(
[0] => A1;0;0
[1] => A2;0;0
[2] => A3;0;0
[3] => A4;0;0
[4] => A5;0;1593720
[5] => A6;0;0
[6] => A7;0;29
[7] => A8;3;0 // this data is to retrieve
[8] => A9;0;0
[9] => A13;0;0
[10] => A14;0;0
[11] => A23;1;33802 // this data is to retrieve
[12] => A25;0;2706254
[13] => A27;0;100
[14] => A30;0;0
[15] => A31;0;100785
[16] => A32;0;0
[17] => A33;0;0
[18] => A34;0;0
[19] => A47;0;128694
[20] => A48;0;2
[21] => B1;0;145
)
Array
(
[0] => A1;0;0
[1] => A2;0;0
[2] => A3;0;0
[3] => A4;0;0
[4] => A5;0;1593688
[5] => A6;0;0
[6] => A7;0;29
[7] => A8;3;0 // this data is to retrieve
[8] => A9;0;0
[9] => A13;0;0
[10] => A14;0;0
[11] => A23;0;33802
[12] => A25;0;2706254
[13] => A27;0;100
[14] => A30;0;0
[15] => A31;0;100785
[16] => A32;0;0
[17] => A33;0;0
[18] => A34;0;0
[19] => A47;0;128694
[20] => A48;0;2
[21] => B1;0;145
)
Array
(
[0] => A1;0;0
[1] => A2;0;0
[2] => A3;2;1 // this data is to retrieve
[3] => A4;0;0
[4] => A5;0;1593688
[5] => A6;0;0
[6] => A7;0;26
[7] => A8;0;981
[8] => A9;0;0
[9] => A13;0;0
[10] => A14;0;0
[11] => A23;0;33802
[12] => A25;0;2706254
[13] => A26;0;3
[14] => A27;0;100
[15] => A30;0;0
[16] => A31;0;100785
[17] => A32;0;0
[18] => A33;0;1
[19] => A34;0;0
[20] => A47;0;128694
[21] => A48;0;2
)
И я хочу вместо этого такой ответ:
Array
(
[7] => A8;3;0 // this data is to retrieve
[11] => A23;1;33802 // this data is to retrieve
)
Array
(
[7] => A8;3;0 // this data is to retrieve
)
Array
(
[2] => A3;2;1 // this data is to retrieve
)
Как я могу это получить? Спасибо за помощь!
array_filter () принимает обратный вызов.
Я пробую использовать цикл for, но сейчас у меня нет метода массива PHP, и у меня нет положительных результатов, поэтому я прошу Вас помочь в этом






Это может помочь: $ array - это массив, который вы хотите отфильтровать.
foreach ($array as $key => $value) {
$columns = explode(';', $value);
if ($columns[1] != 0) {
$columns = implode(';', $columns);
$result[$key] = $columns;
}
}
Эта функция должна помочь вам. Он проходит через массив и сохраняет экземпляры только в соответствии с указанными вами условиями.
function filterArrayForResult($array) {
$newArray = array_filter($array, function($string) {
$stringArray = explode(';', $string); // Creates an array from the string
return ($stringArray[1] != 0); // Only keep the elements that equals true
});
return $newArray // Return the result
}
спасибо, работает очень хорошо!
Есть ли у вас попытки показать нам, что вы пытались решить эту проблему самостоятельно?