通过方法将字符串和数组值作为 class 属性 累积到数组中
Accumulate strings and array values into an array as a class property via method
我有一个 class 方法 add() 接受字符串和数组。我需要一个包含所有用户的数组,但我似乎无法得到它。我得到的只是所有用户的多个数组。我怎样才能将这些数组合并为一个?
class Users {
function add($stringOrArray) {
$arr = array();
if(is_array($stringOrArray)) {
$arr = $stringOrArray;
} else if(is_string($stringOrArray)) {
$arr[] = $stringOrArray;
} else {
echo('errrrror');
}
print_r($arr);
}
当我使用这个测试时:
public function testOne() {
$users = new Users();
$users->add('Terrell Irving');
$users->add('Magdalen Sara Tanner');
$users->add('Chad Niles');
$users->add(['Mervin Spearing', 'Dean Willoughby', 'David Prescott']);
这是我得到的,多个数组,但我需要一个数组。
Array
(
[0] => Terrell Irving
)
Array
(
[0] => Magdalen Sara Tanner
)
Array
(
[0] => Chad Niles
)
Array
(
[0] => Mervin Spearing
[1] => Dean Willoughby
[2] => David Prescott
)
您只需要将添加的用户存储在class属性中,例如$listOfUsers
.
如果添加数组,您使用 array_merge() 函数,否则只需在索引数组的末尾添加新用户。
<?php
class Users {
// here will be all the users stored
public $listOfUsers = array();
function add($stringOrArray) {
//$arr = array();
if(is_array($stringOrArray)) {
// merge two arrays - could create duplicate records
$this->listOfUsers = array_merge($this->listOfUsers, $stringOrArray);
} else if(is_string($stringOrArray)) {
// simply add new item into the array
$this->listOfUsers[] = $stringOrArray;
} else {
echo('errrrror');
}
print_r($this->listOfUsers);
}
}
在您的示例中,您将数据本地存储在方法 add()
中,并且不会保留以备将来使用。使用 class 属性 $listOfUsers 可以更正此行为,可以在 class 对象内使用 $this->listOfUsers
访问,如果需要,可以在 class.[= 外部访问15=]
您可以从您的方法中减少很多不必要的膨胀。
您可以将所有传入数据显式转换为 array
类型。这会将字符串转换为包含单个元素的数组。如果变量已经是数组,则值不会发生任何变化。
使用扩展运算符 (...
) 执行可变参数推送到 class 属性.
代码:(Demo)
class Users
{
public $listOfUsers = [];
function add($stringOrArray): void
{
array_push($this->listOfUsers, ...(array)$stringOrArray);
}
}
$users = new Users;
$users->add('Terrell Irving');
$users->add(['Magdalen Sara Tanner', 'Chad Niles']);
$users->add(['Mervin Spearing']);
var_export($users->listOfUsers);
输出:
array (
0 => 'Terrell Irving',
1 => 'Magdalen Sara Tanner',
2 => 'Chad Niles',
3 => 'Mervin Spearing',
)
我有一个 class 方法 add() 接受字符串和数组。我需要一个包含所有用户的数组,但我似乎无法得到它。我得到的只是所有用户的多个数组。我怎样才能将这些数组合并为一个?
class Users {
function add($stringOrArray) {
$arr = array();
if(is_array($stringOrArray)) {
$arr = $stringOrArray;
} else if(is_string($stringOrArray)) {
$arr[] = $stringOrArray;
} else {
echo('errrrror');
}
print_r($arr);
}
当我使用这个测试时:
public function testOne() {
$users = new Users();
$users->add('Terrell Irving');
$users->add('Magdalen Sara Tanner');
$users->add('Chad Niles');
$users->add(['Mervin Spearing', 'Dean Willoughby', 'David Prescott']);
这是我得到的,多个数组,但我需要一个数组。
Array
(
[0] => Terrell Irving
)
Array
(
[0] => Magdalen Sara Tanner
)
Array
(
[0] => Chad Niles
)
Array
(
[0] => Mervin Spearing
[1] => Dean Willoughby
[2] => David Prescott
)
您只需要将添加的用户存储在class属性中,例如$listOfUsers
.
如果添加数组,您使用 array_merge() 函数,否则只需在索引数组的末尾添加新用户。
<?php
class Users {
// here will be all the users stored
public $listOfUsers = array();
function add($stringOrArray) {
//$arr = array();
if(is_array($stringOrArray)) {
// merge two arrays - could create duplicate records
$this->listOfUsers = array_merge($this->listOfUsers, $stringOrArray);
} else if(is_string($stringOrArray)) {
// simply add new item into the array
$this->listOfUsers[] = $stringOrArray;
} else {
echo('errrrror');
}
print_r($this->listOfUsers);
}
}
在您的示例中,您将数据本地存储在方法 add()
中,并且不会保留以备将来使用。使用 class 属性 $listOfUsers 可以更正此行为,可以在 class 对象内使用 $this->listOfUsers
访问,如果需要,可以在 class.[= 外部访问15=]
您可以从您的方法中减少很多不必要的膨胀。
您可以将所有传入数据显式转换为
array
类型。这会将字符串转换为包含单个元素的数组。如果变量已经是数组,则值不会发生任何变化。使用扩展运算符 (
...
) 执行可变参数推送到 class 属性.
代码:(Demo)
class Users
{
public $listOfUsers = [];
function add($stringOrArray): void
{
array_push($this->listOfUsers, ...(array)$stringOrArray);
}
}
$users = new Users;
$users->add('Terrell Irving');
$users->add(['Magdalen Sara Tanner', 'Chad Niles']);
$users->add(['Mervin Spearing']);
var_export($users->listOfUsers);
输出:
array (
0 => 'Terrell Irving',
1 => 'Magdalen Sara Tanner',
2 => 'Chad Niles',
3 => 'Mervin Spearing',
)