Мне нужно задать значения этого массива:
Мой КОД:
<?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 новичок, поэтому, если у вас есть лучшие способы сделать это, пожалуйста, совет. Спасибо за вашу любезную помощь.
Как отмечалось в вышеприведенных комментариях, я попытался бы изменить $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" );