#php #arrays #multidimensional-array
#php #массивы #многомерный массив
Вопрос:
Мой сценарий таков: у меня есть многомерный массив, и я хочу получить отдельный массив из многомерного массива. Пример: — Первый возврат массива, в котором все значения имеют 100 или более, что ключ и значение возвращаются как разделенные, а второй, если массив имеет одно значение меньше 100, а другие значения имеют 100 и более, что ключ и значение массива возвращаются как разделенные см. Пример ниже,
Array(
[124] => Array
(
[0] => 140
[1] => 101
[2] => 107
[3] => 116
[4] => 100
)
)
Array(
[164] => Array
(
[0] => 108
[1] => 111
[2] => 124
[3] => 87
[4] => 278
)
)
Array(
[162] => Array
(
[0] => 6
[1] => 79
[2] => 3
)
)
И вывод должен быть таким,
Array(
[164] => Array
(
[0] => 108
[1] => 111
[2] => 124
[3] => 87
[4] => 278
)
)
Array(
[162] => Array
(
[0] => 6
[1] => 79
[2] => 3
)
)
Комментарии:
1. В вашем входном примере у вас есть три массива, а в вашем выходном примере точно такие же первые два массива, а третий отсутствует. Я не понимаю логики того, как входные данные сопоставляются с выходными. В вашем вопросе также есть несколько важных опечаток, которые я не решаюсь исправить, потому что их значение может идти в разных направлениях, можете ли вы их исправить? Наконец, нужно что-нибудь попробовать?
2. @chr Я просто хотел получить массив, в котором все значения имеют 100 и более, а все значения с меньшим значением — 100 и более.
3. @ChrisHaas На самом деле я хочу исключить тот тип массива, в котором все значения имеют 100 и еще 100, и мне нужно вывести что-то вроде get array, который проверяет все значения и возвращает, если в этом массиве 3 значения имеют 100 и более, а 1 значение имеет меньше 100.
4. Вы хотите исключить все внутренние массивы, у которых каждое значение меньше 100? Это то, что вы пытаетесь сказать? Таким образом, первый массив не исключается, поскольку он имеет по крайней мере одно значение выше 100. Аналогично, второй массив не исключается, потому что, хотя он имеет значение меньше 100, по крайней мере одно значение больше 100. Наконец, для третьего массива все значения меньше 100, поэтому его следует исключить. Это то, что вы пытаетесь сделать?
5. @ChrisHaas Мое требование заключается в том, чтобы в многомерном массиве проверить все значения массива и вернуть этот ключ и значения, то есть 3 значения имеют на 100 и 100 больше, а 2 значения имеют на 100 меньше, так что ключи и значения, которые я хочу получить из многомерного массива, и проверить, имеет ли массив все значения на 100 и 100 больше, чем ключ и значенияисключить из многомерного массива, чтобы, наконец, массив должен быть, не имеет всех значений 100 и более 100, но в многомерном массиве найденный подмассив имеет 5 значений, но из 5 3 значения имеют 100 и более, а 2 значения имеют менее 100 значений, так что массив ключей и значений, который я хочу.
Ответ №1:
Решение с помощью array_filter() и функции filter100(). Для объяснения функции фильтра см. Комментарии там.
$data = [
124 => [140,101,107,116,100],
164 => [108,111,124,87,278],
162 => [6,79,3],
170 => [6],
171 => [45,34],
172 => [45,134],
];
function filter100($subArr){
$limit = 100;
if(min($subArr) >= $limit) return false; //all values >= 100
$count = count($subArr);
if($count >= 3) return true; //2 values < 100 or 2 values >= 100
//from here on only arrays with 0.1 or 2 values
if($count < 2 OR max($subArr) >= $limit) return false;
return true;
}
$newData = array_filter($data,'filter100');
//test output
echo '<pre>', var_export($newData,true);
Вывод:
array (
164 =>
array (
0 => 108,
1 => 111,
2 => 124,
3 => 87,
4 => 278,
),
162 =>
array (
0 => 6,
1 => 79,
2 => 3,
),
171 =>
array (
0 => 45,
1 => 34,
),
)
Комментарии:
1. Большое спасибо, чувак, ты экономишь мое время, я пытаюсь от 4 до 5 часов, но не получил точного решения, но теперь оно работает так, как я хотел, чтобы массив возвращал массив. Спасибо.
Ответ №2:
foreach ($total_progress as $key => $value) {
foreach ($value as $key1 => $value1) {
if($value1 > 100 ){
unset($total_progress[$key]);
}
}
}
Я пробовал использовать этот код, но он удаляет все 100 и еще 100 значений из массива и возвращает только массив значений на 100 меньше. но я хочу получить массив, который равен 100 и более, с 100 меньшими значениями.
Таким образом, конечный результат должен быть таким
Array(
[164] => Array
(
[0] => 108
[1] => 111
[2] => 124
[3] => 87
[4] => 278
)
[170] => Array
(
[0] => 63
[1] => 100
[2] => 45
[3] => 133
[4] => 243
[5] => 170
)
)
Комментарии:
1. Хорошо, как подход. Не выполняет эту работу, насколько я понимаю. Попробуйте свой подход с моими тестовыми данными.