Нарезка многомерного массива PHP через один из его элементов -- php поле с участием arrays поле с участием associative-array пол Связанный проблема

Slicing a multi-dimensional PHP array across one of its elements


21
vote

проблема

русский

сказать, например, вы только что запрашивали базу данных, и вы получили этот 2D-массив.

 <код> $results = array(     array('id' => 1, 'name' => 'red'  , 'spin' =>  1),     array('id' => 2, 'name' => 'green', 'spin' => -1),     array('id' => 3, 'name' => 'blue' , 'spin' => .5) );   

Я часто нахожу, как это написать петли.

 <код> foreach($results as $result)     $names[] = $result['name'];   

Мои вопросы - это существует ли способ получить этот массив $ имен без использования петли? Использование функций обратного вызова подсчет как с использованием петли.

Вот более универсальный пример получения каждого поля.

 <код> foreach($results as $result)     foreach($result as $key => $value)         $fields[$key][] = $value;   
Английский оригинал

Say for example you just queried a database and you recieved this 2D array.

$results = array(     array('id' => 1, 'name' => 'red'  , 'spin' =>  1),     array('id' => 2, 'name' => 'green', 'spin' => -1),     array('id' => 3, 'name' => 'blue' , 'spin' => .5) ); 

I often find myself writing loops like this.

foreach($results as $result)     $names[] = $result['name']; 

My questions is does there exist a way to get this array $names without using a loop? Using callback functions count as using a loop.

Here is a more generic example of getting every field.

foreach($results as $result)     foreach($result as $key => $value)         $fields[$key][] = $value; 
</div
        
 
 

Список ответов

23
 
vote
vote
Лучший ответ
 

По состоянию на 20 июня в PHP-5.5 есть новая функция array_column

Например:

 <код> $records = array(     array(         'id' => 2135,         'first_name' => 'John',         'last_name' => 'Doe'     ),     array(         'id' => 3245,         'first_name' => 'Sally',         'last_name' => 'Smith'     ),     array(         'id' => 5342,         'first_name' => 'Jane',         'last_name' => 'Jones'     ),     array(         'id' => 5623,         'first_name' => 'Peter',         'last_name' => 'Doe'     ) );   $firstNames = array_column($records, 'first_name'); print_r($firstNames);   

вернется

 <код> Array (     [0] => John     [1] => Sally     [2] => Jane     [3] => Peter )   

Есть еще больше примеров в вышеупомянутой ссылке.

 

As of June 20th in PHP-5.5 there is a new function array_column

For example:

$records = array(     array(         'id' => 2135,         'first_name' => 'John',         'last_name' => 'Doe'     ),     array(         'id' => 3245,         'first_name' => 'Sally',         'last_name' => 'Smith'     ),     array(         'id' => 5342,         'first_name' => 'Jane',         'last_name' => 'Jones'     ),     array(         'id' => 5623,         'first_name' => 'Peter',         'last_name' => 'Doe'     ) );   $firstNames = array_column($records, 'first_name'); print_r($firstNames); 

Will return

Array (     [0] => John     [1] => Sally     [2] => Jane     [3] => Peter ) 

There are even more examples in the above mentioned link.

</div
 
 
 
 
14
 
vote

Я проголосовал @ Devon ответ вверх, потому что действительно не способ делать то, что вы спрашиваете со встроенной функцией. Лучшее, что вы можете сделать, это напишите:

 <код> function array_column($array, $column) {     $ret = array();     foreach ($array as $row) $ret[] = $row[$column];     return $ret; }   
 

I voted @Devon's response up because there really isn't a way to do what you're asking with a built-in function. The best you can do is write your own:

function array_column($array, $column) {     $ret = array();     foreach ($array as $row) $ret[] = $row[$column];     return $ret; } 
</div
 
 
         
         
7
 
vote

Пуск PHP 5.3, вы можете использовать этот красивый звонок с функцией лямбда:

 <Код> $names = array_map(function ($v){ return $v['name']; }, $results);   

Это вернет массив, нарезанный измерением «Имя».

 

Starting PHP 5.3, you can use this pretty call with lambda function:

$names = array_map(function ($v){ return $v['name']; }, $results); 

This will return array sliced by 'name' dimension.

</div
 
 
 
 
5
 
vote

Проще говоря, нет.

Вам нужно будет использовать петлю или функцию обратного вызова, такую ​​как array_walk .

.
 

Simply put, no.

You will need to use a loop or a callback function like array_walk.

</div
 
 
 
 
2
 
vote

Я сделал больше исследований об этом и обнаружил, что Ruby и Prototype оба имеют функцию, которая называется это называется array_pluck , 2 Интересно, что <код> array_map имеет второе использование, которое позволяет сделать обратную часть того, что я хочу сделать здесь. Я также нашел PHP Класс Кто-то пишет, чтобы эмулировать прототипы манипуляции массивов.

Я собираюсь сделать еще несколько копать, и если я не найду ничего другого, я буду работать на патче, чтобы отправиться в список рассылки internals@lists.php.net и посмотреть, добавит ли они Array_Pluck.

 

I did more research on this and found that ruby and prototype both have a function that does this called array_pluck,2. It's interesting that array_map has a second use that allows you to do the inverse of what i want to do here. I also found a PHP class someone is writing to emulate prototypes manipulation of arrays.

I'm going to do some more digging around and if I don't find anything else I'll work on a patch to submit to the internals@lists.php.net mailing list and see if they will add array_pluck.

</div
 
 
2
 
vote

Для тех из вас, которые не могут обновить до <код> PHP5.5 прямо сейчас и нуждаются в этой функции, вот реализация <код> array_column .

 <код> function array_column($array, $column){     $a2 = array();     array_map(function ($a1) use ($column, &$a2){         array_push($a2, $a1[$column]);     }, $array);     return $a2; }   
 

For those of you that cannot upgrade to PHP5.5 right now and need this function, here is an implementation of array_column.

function array_column($array, $column){     $a2 = array();     array_map(function ($a1) use ($column, &$a2){         array_push($a2, $a1[$column]);     }, $array);     return $a2; } 
</div
 
 
1
 
vote

Если вы используете версию PHP до 5,5 и <Код> select Seller, sum(case when Transactiondate between '20150601' and '20150831' then Amount else 0 end) as Q1Amount, sum(case when Transactiondate between '20150901' and '20151231' then Amount else 0 end) as Q2Amount, sum(case when Transactiondate between '20160101' and '20160229' then Amount else 0 end) as Q3Amount, sum(case when Transactiondate between '20160301' and '20160531' then Amount else 0 end) as Q4Amount from TableName group by Seller 0 , вы можете использовать официальную замену в простом PHP:

https://github.com/ramsey/array_column

 

If you are running a version of PHP before 5.5 and array_column(), you can use the official replacement in plain PHP:

https://github.com/ramsey/array_column

</div
 
 
0
 
vote

Я думаю, что это сделает то, что вы хотите

array_uintersect_uassoc

Вам придется сделать что-то вроде этого

 <код> $results = array(     array('id' => 1, 'name' => 'red'  , 'spin' =>  1),     array('id' => 2, 'name' => 'green', 'spin' => -1),     array('id' => 3, 'name' => 'blue' , 'spin' => .5) ); $name = array_uintersect_uassoc( $results, array('name' => 'value')  , 0, "cmpKey"); print_r($name);  ////////////////////////////////////////////////// // FUNCTIONS ////////////////////////////////////////////////// function cmpKey($key1, $key2) {   if ($key1 == $key2) {     return 0;   } else {     return -1;   } }   

Однако у меня нет доступа к php5, поэтому я не проверил это.

 

I think this will do what you want

array_uintersect_uassoc

You would have to do something like this

$results = array(     array('id' => 1, 'name' => 'red'  , 'spin' =>  1),     array('id' => 2, 'name' => 'green', 'spin' => -1),     array('id' => 3, 'name' => 'blue' , 'spin' => .5) ); $name = array_uintersect_uassoc( $results, array('name' => 'value')  , 0, "cmpKey"); print_r($name);  ////////////////////////////////////////////////// // FUNCTIONS ////////////////////////////////////////////////// function cmpKey($key1, $key2) {   if ($key1 == $key2) {     return 0;   } else {     return -1;   } } 

However, I don't have access to PHP5 so I haven't tested this.

</div
 
 
   
   
0
 
vote

Вы можете сделать:

 <код> $tmp = array_flip($names); $names = array_keys($tmp);   
 

You could do:

$tmp = array_flip($names); $names = array_keys($tmp); 
</div
 
 
0
 
vote

Это быстрая функциональная альтернатива Array_Column ()

 <код> if(!function_exists('array_column')) {     function array_column($element_name) {         $ele =   array_map(function($element) {             return $element[$element_name];         }, $a);         return  $ele;     } }   
 

This is fast function alternative of array_column()

if(!function_exists('array_column')) {     function array_column($element_name) {         $ele =   array_map(function($element) {             return $element[$element_name];         }, $a);         return  $ele;     } } 
</div
 
 

Связанный проблема

0  Авто не показывая результат jQuery  ( Auto complete not showing result jquery ) 
Я пытаюсь создать автоматическую комплектацию, используя jqueryui.i am echo ing a jquery a age ange Результат базы данных из удаленного поиска файлов.php.it п...

1  Запрос CURL PHP для ошибки возврата веб-службы  ( Php curl request for web service returning error ) 
Я продолжаю получать ошибку: «Не удалось отменить сущность Serialize» при выполнении запроса на отдых ниже. Я предполагаю, что это связано с форматированием м...

6  Как вы заставляете гравитар на отображение идентификатора  ( How do you force gravatar into displaying identicon ) 
Есть ли способ заставить Gravatar до всегда Вернуть identicon url? P >. Единственный способ, которым я нашел до сих пор: <Код> ?forcedefault=1&default=my...

1  Как читать защищенные данные из API API / PHP API Facebook API / PHP  ( How to read protected data from facebook ads api php sdk ) 
Я получаю защищенный объект, возвращенный из вызова API в рекламу Facebook. Я звоню с <код> $campaigns = $account->getAdCampaigns($fields, $params); и...

3  Рассчитать размер плитки карты Google на уровне масштабирования N  ( Calculate tile size of google map at zoom level n ) 
Эй. Эй. У меня есть приложение MAPS, которое использует карты Google. Я получаю границы от карты, а затем я делаю некоторые кластеризащие маркеры на этой терр...

0  Защита пользовательских данных - для использования в вызовах метода, SQL и файловые вызовы  ( Securing user data for use in method calls sql and file calls ) 
Я использую <код> $_GET , <код> $_POST и <код> $_COOKIE Переменные в вызовах метода, SQL-запросы и файловые вызовы - и необходимо сбежать / Перепишите эти д...

1  Почему PHP не может создать файл, даже с 777 разрешениями?  ( Why cant php create a file even with 777 permissions ) 
У меня есть тестовый сервер виртуальной арки Linux с Xampp, работающим на моем ноутбуке, и я не могу получить PHP для создания новых файлов, даже с разрешения...

0  Если запись в таблице A не существует в таблице b сделать что-то, как бы я пошел по этому поводу?  ( If record in table a does not exist in table b do something how would i go abou ) 
У меня есть таблица A с полем, называемым писем, мне нужно проверить таблицу B, которая также имеет поле под названием Emails. Если электронное письмо в табли...

0  PHP Проверка формата DateTime с помощью PREG_MATCH и CHECHDATE неправильный результат  ( Php checking datetime format using preg match and checkdate wrong result ) 
Я хочу подтвердить формат dateTime с помощью функции preg_match () и checkdate (). Мой формат «DD / MM / YYYY HH: MM: SS». Что не так с моим кодом? <код> fu...

1  Правильный способ отправить почтовики, используя PHP?  ( Proper way to send mailers using php ) 
У меня есть PHP-скрипт для отправки 1 00 000 писем каждый день. Он просто управляет всеми электронными письмами в цикле и ссылается на почту () .. Я не могу...

0  Как вы используете PHP и SQL для отправки данных таблицы на другую таблицу  ( How do you use php and sql to submit table data to another table ) 
У меня есть таблица полетов, и я использую цикл, чтобы распечатать информацию о рейсах, наряду с кнопкой отправки, кнопка, которая нажала, - это представленны...

0  Cookie не доступно на сайте  ( Cookie not available sitewide ) 
У меня есть два вопроса с настройкой и извлечением файлов cookie. cookie загружается, но нельзя вызывать, пока страница не будет обновлена. Это означает, ч...

2  Сделать HTACCESS не применять для некоторых подпапок  ( Make htaccess to not be applied for some subfolders ) 
Я использую эту htaccess для моего приложения. <код> <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQ...

0  Symfony2 параметр или проблема кэша  ( Symfony2 parameter or cache issue ) 
Я использую Symfony2 для моего приложения и приложения, работая нормально в Windows, но когда я загружаю его на сервер (Ubuntu 12.04 LTS), дает следующую ошиб...

0  WordPress Query 'Orderby' => 'meta_value' списки 10 до 9  ( Wordpress query orderby meta value lists 10 before 9 ) 
Я создаю сайт WordPress для моего отца в ресторане закона. Каждый курс имеет номер, который я перечисляю с использованием «orderby» расширенного пользовательс...

Связанный проблема

0  Авто не показывая результат jQuery 
1  Запрос CURL PHP для ошибки возврата веб-службы 
6  Как вы заставляете гравитар на отображение идентификатора 
1  Как читать защищенные данные из API API / PHP API Facebook API / PHP 
3  Рассчитать размер плитки карты Google на уровне масштабирования N 
0  Защита пользовательских данных - для использования в вызовах метода, SQL и файловые вызовы 
1  Почему PHP не может создать файл, даже с 777 разрешениями? 
0  Если запись в таблице A не существует в таблице b сделать что-то, как бы я пошел по этому поводу? 
0  PHP Проверка формата DateTime с помощью PREG_MATCH и CHECHDATE неправильный результат 
1  Правильный способ отправить почтовики, используя PHP? 
0  Как вы используете PHP и SQL для отправки данных таблицы на другую таблицу 
0  Cookie не доступно на сайте 
2  Сделать HTACCESS не применять для некоторых подпапок 
0  Symfony2 параметр или проблема кэша 
0  WordPress Query 'Orderby' => 'meta_value' списки 10 до 9