给定一个多维数组,我正在寻找一种方法来提取该数组的各个部分,给定变量(即不同的)标准。
例如,如果这是我的数据:
array(
'0' => array(
'0' => 'aaaaaa',
'1' => 'bbbbb',
'2' => 'ccccc'
),
'1' => array(
'0' => 'aa2ssa',
'1' => 'bb3242bb,
'2' => 'ccccc234'
),
'2' => array(
'0' => 'aaa234aa',
'1' => 'b3242b',
'2' => 'cewrcc'
),
(etc)
)
我希望能够调用一个函数
function new_array( index, sub_index )
返回一个基于 index 和 sub_index 参数的数组。使用相同的数据但不同的参数将返回不同的数据。
例子1
new_array( array(0, 2), ( array(1, 2), array(0, 2) ) )
预期结果:
array(
'0' => array(
'1' => 'bbbbb',
'2' => 'ccccc'
),
'2' => array(
'0' => 'aaa234aa',
'2' => 'cewrcc'
)
)
例子2
new_array( array(2), ( array(0, 2) ) )
预期结果:
array(
'2' => array(
'0' =>'aaa234aa',
'1' => 'b3242b'
)
)
有人知道怎么做吗?谢谢!
最佳答案
@Orbling 的替代解决方案是这样的:
function populateData() // CHANGE ME to populate the info how you please
{
$seed = 'abcdefghijklmnopqrstuvwxyz0123456789';
$_ = ''; $length = rand(5,8);
for ($__ = 0; $__ < $length; $__++) $_ .= substr($seed,rand(0,strlen($seed)),1);
return $_;
}
function new_array()
{
$args = func_num_args();
if ($args == 0)
return FALSE; // flag error if no arguments are passed
$template = func_get_arg(0);
if ($template == null || !is_array($template) || $args < (count($template)+1))
return FALSE; // flag error if we don't have enough information
$resultAry = Array();
$arg = 1;
foreach ($template as $t)
{
$resultArySub = Array();
$templateSub = func_get_arg($arg++);
if ($templateSub == FALSE || !is_array($templateSub))
return FALSE; // error checking for valid input
foreach ($templateSub as $tS)
$resultArySub[$tS] = populateData();
$resultAry[$t] = $resultArySub;
}
return $resultAry;
}
header('Content-Type: text/plain');
echo "your request (or so i understood):\r\n";
$test = new_array(array(0,2),array(1,2),array(0,2));
var_dump($test);
echo "\r\nextra array on end is ignored:\r\n";
$test = new_array(array(4,2),array(1,2),array(0,2),array(3,5));
var_dump($test);
echo "\r\nno data is a FALSE:\r\n";
$test = new_array();
var_dump($test);
echo "\r\ntoo few arguments for what was supplied in first argument is a FALSE:\r\n";
$test = new_array(array(1,2,3),array(4,5),array(6,7));
var_dump($test);
echo "\r\nas long as there's as \"array argument\" for every element of the \"first argument\", this will work:\r\n";
$test = new_array(array(1,2,3,4,5,6,7),array(1),array(2),array(3),array(4),array(5),array(6),array(7));
var_dump($test);
echo "\r\nall arguments must be an array\r\n";
$test = new_array(array(1,2),'not','arrays');
var_dump($test);
生成一个包含随机条目的数组。上述结果将是:
your request (or so i understood):
array(2) {
[0]=>
array(2) {
[1]=>
string(8) "mjdfsmda"
[2]=>
string(8) "qg2bzsj6"
}
[2]=>
array(2) {
[0]=>
string(7) "345plm8"
[2]=>
string(7) "1exlla6"
}
}
extra array on end is ignored:
array(2) {
[4]=>
array(2) {
[1]=>
string(5) "0ngei"
[2]=>
string(5) "q6tmg"
}
[2]=>
array(2) {
[0]=>
string(7) "4enz61q"
[2]=>
string(6) "6bojtn"
}
}
no data is a FALSE:
bool(false)
too few arguments for what was supplied in first argument is a FALSE:
bool(false)
as long as there's as "array argument" for every element of the "first argument", this will work:
array(7) {
[1]=>
array(1) {
[1]=>
string(7) "ndulmi9"
}
[2]=>
array(1) {
[2]=>
string(7) "jip402j"
}
[3]=>
array(1) {
[3]=>
string(5) "3bn0d"
}
[4]=>
array(1) {
[4]=>
string(8) "b80le1jh"
}
[5]=>
array(1) {
[5]=>
string(5) "x31sw"
}
[6]=>
array(1) {
[6]=>
string(8) "x8e3dge7"
}
[7]=>
array(1) {
[7]=>
string(8) "vcpf997y"
}
}
all arguments must be an array
bool(false)
关于algorithm - 基于可变条件提取多维数组部分的 PHP 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4454716/