Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从其他关联数组生成关联数组?_Php_Arrays_String_Algorithm_Associative Array - Fatal编程技术网

Php 如何从其他关联数组生成关联数组?

Php 如何从其他关联数组生成关联数组?,php,arrays,string,algorithm,associative-array,Php,Arrays,String,Algorithm,Associative Array,我需要一些关于我正在处理的另一个PHP问题的帮助。我不会发布确切的问题,因为我更愿意尝试并应用从这里获得的知识来解决我的问题 第一名: 我有一个关联数组。我必须在数组中循环查找具有以特定字符串开头的键的数组值,并将键和值推送到输出数组中 例如: -在下面的数组中循环并将键以“0”开头的所有元素推送到输出数组中: $assoc_array = array( 'edible_fruit' => 'apple', 'animal' => 'cat', 'edible

我需要一些关于我正在处理的另一个PHP问题的帮助。我不会发布确切的问题,因为我更愿意尝试并应用从这里获得的知识来解决我的问题

第一名: 我有一个关联数组。我必须在数组中循环查找具有以特定字符串开头的键的数组值,并将键和值推送到输出数组中

例如:
-在下面的数组中循环并将键以“0”开头的所有元素推送到输出数组中:

$assoc_array = array(
    'edible_fruit' => 'apple',
    'animal' => 'cat',
    'edible_veg' => 'pumpkin',
    'number' => '23',
    'city' => 'Cape Town',
    'edible_berry' => 'blueberry',
    'color' => 'blue'
);
这样行吗

$result = array();

foreach ($assoc_array as $key => $value) {
    if (substr($key, 0, 7) == "edible_") {
        array_push($result, $value);
    }
}

print_r($result);
: 我如何从输出数组的键中删除“可食的”?对于这第二点,我甚至不知道从哪里开始

第三: 在您的帮助下,我已经设法解决了上述问题,谢谢!现在我只需要了解如何在每行末尾打印带有日期和时间戳的新行上的每个元素?我有这个(似乎不起作用):

while(列表($key,$value)=每个($output)){
打印(“$key=>$value.”日期(“y/m/d G.i:s”,time())。“
”; }
您的第一个代码将起作用

要从键中删除
explode()
,可以使用
explode()
-

$keyParts = explode('_', $key);
$newKey = $keyParts[1];
您必须向数组中添加新的键,而您现在没有这样做

foreach ($assoc_array as $key => $value) {
    if (substr($key, 0, 7) == "edible_") {
        $keyParts = explode('_', $key);
        $newKey = $keyParts[1];
        $result[$newKey] = $value;
    }
}

这就是我的方法:

foreach($assoc_array as $key => $value) {
    if(preg_match("/^edible_/",$key)) {
        $result[preg_replace("/^edible_/","",$key)] = $value;
    }
}
使用
preg\u match
检查键是否以您要查找的内容开头,并使用
preg\u replace
从键的开头(
^
)删除字符串:)

输入(
$assoc\u数组
):

输出(
$result
):


首先:是的,可以,不过我会重写一下:

foreach ($assoc_array as $key => $value) {
    if (strpos($key, 'edible_') === 0) {
        $result[] = $value;
    }
}
关于:您正在询问如何从输出数组中删除密钥。但是,您甚至没有将键推入输出数组,而是只推入了值。如果您还想按此键,则应按以下方式操作:

$result[$key] = $value;
foreach ($assoc_array as $key => $value) {
    if (strpos($key, 'edible_') === 0) {
        $key = str_replace('edible_', '', $key)
        $result[$key] = $value;
    }
}
但是,既然您还没有这样做,就没有必要删除密钥

但是,如果您的意思是从
$assoc\u数组
中删除键的可食用部分,则只需向循环中添加一行,并通过添加
&
通过引用传递键:

foreach ($assoc_array as &$key => $value) {
    if (strpos($key, 'edible_') === 0) {
        $key = str_replace('edible_', '', $key)
        $result[] = $value;
    }
}
编辑:正如OP在评论中告诉我的那样,她想在没有可食用部分的情况下按键。就这样做吧:

$result[$key] = $value;
foreach ($assoc_array as $key => $value) {
    if (strpos($key, 'edible_') === 0) {
        $key = str_replace('edible_', '', $key)
        $result[$key] = $value;
    }
}

您可以在数组中循环并搜索该键是否包含可以消除的字符串,并使您的
$newArray

<?php

$assoc_array = array('edible_fruit'=>'apple', 'animal'=>'cat', 'edible_veg'=>'pumpkin', 'number'=>'23', 'city'=>'Cape Town', 'edible_berry'=>'blueberry', 'color'=>'blue');

$search = 'edible_';
$newArray = array();

#First and Second Step
foreach($assoc_array as $key => $value) {
    if(strpos($key, "edible_") === 0) {
        $newArray[substr($key, 7)] = $value;
    }
}


print_r($newArray);

echo "<br>\n";

#Third Step
foreach($newArray as $key => $value) {
    echo "$key => $value " . date("y/m/d G.i:s", time()) . "<br>\n"; 
}   

这应该适合您:

首先,我删除所有元素,这些元素在键的开头没有
可食用的
。在这之后,我简单地用它们的键来标记元素,在这里我用and删除前缀


“这行吗?”-为什么不试试呢?我觉得不错。要从键中删除字符串,可以使用
str\u replace()
preg\u replace()
。第一个将只替换字符串中的任何位置,第二个使用正则表达式,因此如果您愿意,可以将替换锚定到字符串的开头。我正在尝试,但它似乎根本无法打印任何内容。输出仍然为空:-/-您是在控制台上运行它还是在Apache中运行它?那么这个问题我们在哪里?下面的一个答案是否解决了您的问题?对于
strpos
,这不是
0
吗?谢谢您的建议!我注意到现在我没有按钥匙,我不知道该怎么做。最终输出仍然有一个键&值,但不是“可食用的水果”,而是“水果”,如果这有意义的话?哇!试一试
不可食用蘑菇
?@alliepscoal你测试了我的答案,你有进步吗?
<?php

$assoc_array = array('edible_fruit'=>'apple', 'animal'=>'cat', 'edible_veg'=>'pumpkin', 'number'=>'23', 'city'=>'Cape Town', 'edible_berry'=>'blueberry', 'color'=>'blue');

$search = 'edible_';
$newArray = array();

#First and Second Step
foreach($assoc_array as $key => $value) {
    if(strpos($key, "edible_") === 0) {
        $newArray[substr($key, 7)] = $value;
    }
}


print_r($newArray);

echo "<br>\n";

#Third Step
foreach($newArray as $key => $value) {
    echo "$key => $value " . date("y/m/d G.i:s", time()) . "<br>\n"; 
}   
#First and Second Step
    Array ( [fruit] => apple [veg] => pumpkin [berry] => blueberry )

#Third Step    
    fruit => apple 15/04/10 3.02:16
    veg => pumpkin 15/04/10 3.02:16
    berry => blueberry 15/04/10 3.02:16
<?php

    $assoc_array = array('edible_fruit'=>'apple', 'animal'=>'cat', 'edible_veg'=>'pumpkin', 'number'=>'23', 'city'=>'Cape Town', 'edible_berry'=>'blueberry', 'color'=>'blue');

    //remove elemnts
    $result = array_diff_ukey($assoc_array, ["edible_" => ""], function($k1, $k2){
        return substr($k1, 0, 7) == $k2;
    });

    //change keys
    $result = array_combine(
                array_map(function($v){
                    return substr($v, 7);
                }, array_keys($result)),
            $result);

    print_r($result);

?>
Array ( [fruit] => apple [veg] => pumpkin [berry] => blueberry )