Intereting Posts
Нет результатов с текстовым поиском MongoDB PHP PHP добавление пользовательского пространства имен с помощью автозагрузчика от композитора Список XMPPHP с онлайн-статусом Пригласите друзей на мероприятие facebook api Должен ли я проверить возвращаемое значение операции выполнения в pdo php PHP escape пользовательский ввод для имени файла В чем разница между расширением и zend_extension в php.ini? «пройти через» загрузку php на s3 амазонки? Ошибка «Нет классов метаданных для обработки» при создании таблиц БД в Symfony (с использованием Doctrine), созданных с использованием доктрины php app / console: generate: entity Как вы выполняете несколько операторов SQL в одной mysql_query? Как чистить изображение с помощью PHP с моего сайта? PHP Сохранить форму в изображение или PDF с помощью стиля Сравнение поплавков – такое же число, но не равно? DOMDocument: игнорировать повторяющиеся идентификаторы элементов Переменные переменные в PHP – Какова их цель?

Как сортировать / фильтровать значения из массива PHP?

Мне нужно задать значения этого массива:

Мой КОД:

<?php print_r(array_filter($matches)); ?> 

Результат этого КОДА:

 Array ( [0] => Array ( [0] => Age: // Name [1] => 22 Yrs. // Value [2] => Ethnicity: // Name [3] => Caucasian // Value [4] => Location: // Name [5] => London, United Kingdom // Value 

Теперь я хочу, чтобы эти значения были разделены / отфильтрованы как:

 $location = 'London, United Kingdom'; $age = '22 Yrs.'; 

Поэтому я могу просто сделать echo $age;

Примечание . В некоторых случаях пользователь НЕ задал все значения. Поэтому не гарантируется, что Value Age всегда существует в этом массиве. Поэтому мне нужно что-то вроде:

Если в массиве найдено «Возраст:», то $ age =

Как я могу это сделать? У меня есть 33 имени и 33 значения в этом массиве и их необходимо отфильтровать на основе оператора IF, чтобы убедиться, что значение является правильным значением.

Результат var_dump($matches); :

 array(1) { [0]=> array(66) { [0]=> string(202) " Age: " [1]=> string(157) " 22 Yrs. " [2]=> string(196) " Ethnicity: " [3]=> string(146) " Caucasian " [4]=> string(195) " Location: " [5]=> string(175) " London, United Kingdom " 

Результат var_export($matches); :

 array ( 0 => array ( 0 => ' Age: ', 1 => ' 22 Yrs. ', 2 => ' Ethnicity: ', 3 => ' Caucasian ', 4 => ' Location: ', 5 => ' London, United Kingdom ', 

Im новичок, поэтому, если у вас есть лучшие способы сделать это, пожалуйста, совет. Спасибо за вашу любезную помощь.

Related of "Как сортировать / фильтровать значения из массива PHP?"

Как отмечалось в вышеприведенных комментариях, я попытался бы изменить $matches если это вообще возможно, было бы гораздо проще работать с ассоциативными массивами для этого варианта использования.

Однако, принимая его за номинал, который вы застряли в этой структуре данных, вот, наверное, очень наивный подход …

это предполагает, что ваши данные всегда будут отображаться в формате [key, value, key, value, ...] :

 <?php // original data $matches = array( array( 'Age:', '22 Yrs.', 'Ethnicity:', 'Caucasian', 'Location:', 'London, United Kingdom', 'Location:', ) ); // chunk $matches sub-array into pairs // we want each chunk to contain two elements, // the first will be the key and the second will be the value $chunks = array_chunk($matches[0], 2); // apply a callback to each array element $pairs = array_map(function($pair) { // some basic error checking... // if the matches subarray count is uneven for some reason if (count($pair) !== 2) { return array(); } // assign each element in the pair list($key, $val) = $pair; // some basic key normalisation // remove non alpha chars and lowercase $key = strtolower($key); $key = preg_replace('/\W+/', '', $key); // return a key value pair return array($key => $val); }, $chunks); // iterate over the pairs // and extract into the current scope... foreach ($pairs as $pair) { extract($pair); } // and you should now be able to echo your values echo $age; echo $ethnicity; echo $location; 

Результат:

 22 Yrs. Caucasian London, United Kingdom 

Надеюсь, это поможет 🙂 Повторяю, я бы рекомендовал реструктурировать исходную структуру данных, потому что это решение вряд ли оптимально.

Этот ответ предполагает, что вы работаете с массивом, который непосредственно содержит данные, в отличие от вашего выходного примера, который отображает 3 вложенных массива.

 for($i=0; $i<(count($matches)/2); $i++){ $label = substr($matches[$i*2],0,-1); $output[$label] = $matches[$i*2+1]; } 

Это сделает $ output ассоциативным массивом, адресуемым следующим образом:

 echo($output["Age"]); 

К сожалению, это невозможно, насколько я знаю, чтобы превратить его в отдельные переменные.

Может быть проще использовать отдельные массивы, например.

 $Age = Array ( [0] => 22, [1] => 33 ); $Ethnicity = Array ( [0] => "Caucasian", [1] => "Other" ); $Location= Array ( [0] => "London, United Kingdom", [1] => "Germany" );