Skip to content

Commit 217dc4a

Browse files
committed
Add array_column()
1 parent 32f91df commit 217dc4a

File tree

5 files changed

+111
-11
lines changed

5 files changed

+111
-11
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Refer to http://php.net/eol.php for the latest updates on supported PHP versions
1313
## Features polyfilled by this library
1414

1515
* PHP 5.5
16+
* `array_column()`
1617
* `boolval()`
1718
* `hash_pbkdf2()`
1819
* `openssl_pbkdf2()`

autoload.php

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,27 @@
3030
});
3131
error_reporting(E_ALL); ini_set('display_errors', 'On');
3232

33+
34+
if (!function_exists('array_column')) {
35+
/**
36+
* Get the boolean value of a variable
37+
*/
38+
function array_column(array $array, $column_key, $index_key = null)
39+
{
40+
return Future\Utility::arrayColumn($array, $column_key, $index_key);
41+
}
42+
}
43+
44+
if (!function_exists('boolval')) {
45+
/**
46+
* Get the boolean value of a variable
47+
*/
48+
function boolval($mixed_var)
49+
{
50+
return !!$mixed_var;
51+
}
52+
}
53+
3354
if (!function_exists('hash_equals')) {
3455
/**
3556
* From PHP 5.6
@@ -107,13 +128,3 @@ function openssl_pbkdf2($password, $salt, $length, $iterations, $algo = 'sha1')
107128
return $key;
108129
}
109130
}
110-
111-
if (!function_exists('boolval')) {
112-
/**
113-
* Get the boolean value of a variable
114-
*/
115-
function boolval($mixed_var)
116-
{
117-
return !!$mixed_var;
118-
}
119-
}

src/Utility.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace ResonantCore\PHPFuture;
4+
5+
/**
6+
* The MIT License (MIT)
7+
*
8+
* Copyright (c) 2015 Resonant Core, LLC
9+
*
10+
* Permission is hereby granted, free of charge, to any person obtaining a copy
11+
* of this software and associated documentation files (the "Software"), to deal
12+
* in the Software without restriction, including without limitation the rights
13+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14+
* copies of the Software, and to permit persons to whom the Software is
15+
* furnished to do so, subject to the following conditions:
16+
*
17+
* The above copyright notice and this permission notice shall be included in all
18+
* copies or substantial portions of the Software.
19+
*
20+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26+
* SOFTWARE.
27+
*/
28+
class Utility
29+
{
30+
/**
31+
* Return the values from a single column in the input array
32+
*
33+
* @param array $array A multi-dimensional array (record set) from which to pull a column of values.
34+
* @param string|int $column_key The column of values to return.
35+
* @param string|int|null $index_key The column to use as the index/keys for the returned array.
36+
*
37+
* @return array
38+
*/
39+
public static function arrayColumn(array $array, $column_key, $index_key = null)
40+
{
41+
$aReturn = [];
42+
if ($column_key === null) {
43+
// No column key? Grab the whole row...
44+
if ($index_key === null) {
45+
return $array;
46+
}
47+
foreach ($array as $sub) {
48+
$aReturn[$sub[$index_key]] = $sub;
49+
}
50+
} elseif (empty($index_key)) {
51+
foreach ($array as $sub) {
52+
$aReturn[] = $sub[$column_key];
53+
}
54+
} else {
55+
foreach ($array as $sub) {
56+
$aReturn[$sub[$index_key]] = $sub[$column_key];
57+
}
58+
}
59+
return $aReturn;
60+
}
61+
}

tests/Utility.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
use \ResonantCore\PHPFuture as Future;
3+
4+
class TestSecurity extends PHPUnit_Framework_TestCase
5+
{
6+
/**
7+
* @covers \ResonantCore\PHPFuture\Utilty::arrayColumn()
8+
*/
9+
public function testArrayColumn()
10+
{
11+
$x = [
12+
['a' => 1, 'b' => 1],
13+
['a' => 2, 'b' => 3],
14+
['a' => 3, 'b' => 2]
15+
];
16+
17+
$y = [
18+
1 => 1,
19+
2 => 3,
20+
3 => 2
21+
];
22+
23+
$this->assertEquals(
24+
$y,
25+
Future\Utility::arrayColumn($x, 'b', 'a')
26+
);
27+
}
28+
}

wishlist.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ PHP 5.5
22

33
FUNCTIONS
44
=========
5-
array_column()
65
curl_escape()
76
curl_unescape()
87
pg_escape_literal()

0 commit comments

Comments
 (0)